Grindstone Game Engine v0.2.0
An open source game engine and toolkit.
Loading...
Searching...
No Matches
RenderGraphBuilder.hpp
1#pragma once
2
3#include <variant>
4#include <vector>
5
6#include <Common/HashedString.hpp>
7#include <Common/Memory/SmartPointers/UniquePtr.hpp>
8#include "RenderGraphBuilderPass.hpp"
9#include "RenderGraph.hpp"
10
11namespace Grindstone::Renderer {
13 public:
14 template<typename ReturnType, typename SetupCallback, typename ExecutionCallback>
15 ReturnType CreateGraphicsPass(
16 Grindstone::StringRef name,
18 SetupCallback setupImmediateCallback,
19 ExecutionCallback executionCallback
20 ) {
21 static_assert(std::is_invocable_r_v<ReturnType, SetupCallback, Grindstone::Renderer::GraphicsRenderGraphBuilderPass<ReturnType>&>, "Rendergraph setup callback must match expected signature.");
22 static_assert(std::is_invocable_r_v<void, ExecutionCallback, Grindstone::Math::IntRect2D, const Grindstone::Renderer::RenderGraphContext&, const Grindstone::Renderer::RenderGraphFrameResources&, ReturnType&>, "Rendergraph execution callback must match expected signature.");
23 uint32_t passIndex = static_cast<uint32_t>(passes.size());
24 auto& uniquePtr = passes.emplace_back(Grindstone::Memory::AllocatorCore::AllocateUnique<GraphicsRenderGraphBuilderPass<ReturnType>>());
25 auto pass = static_cast<GraphicsRenderGraphBuilderPass<ReturnType>*>(uniquePtr.Get());
26 pass->name = name;
27 pass->type = GpuPassType::Graphics;
28 pass->renderGraphBuilder = this;
29 pass->SetExecutionCallback(executionCallback);
30 pass->SetRenderingArea(metaRect);
31 pass->passIndex = passIndex;
32 pass->returnData = setupImmediateCallback(*pass);
33 return pass->returnData;
34 }
35
36 template<typename ReturnType, typename SetupCallback, typename ExecutionCallback>
37 ReturnType CreateComputePass(
38 Grindstone::StringRef name,
39 SetupCallback setupImmediateCallback,
40 ExecutionCallback executionCallback
41 ) {
42 static_assert(std::is_invocable_r_v<ReturnType, SetupCallback, Grindstone::Renderer::ComputeRenderGraphBuilderPass<ReturnType>&>, "Rendergraph setup callback must match expected signature.");
43 static_assert(std::is_invocable_r_v<void, ExecutionCallback, Grindstone::Renderer::RenderGraphContext&, const Grindstone::Renderer::RenderGraphFrameResources&, ReturnType&>, "Rendergraph execution callback must match expected signature.");
44
45 uint32_t passIndex = static_cast<uint32_t>(passes.size());
46 auto& uniquePtr = passes.emplace_back(Grindstone::Memory::AllocatorCore::AllocateUnique<ComputeRenderGraphBuilderPass<ReturnType>>());
47 auto pass = static_cast<ComputeRenderGraphBuilderPass<ReturnType>*>(uniquePtr.Get());
48 pass->name = name;
49 pass->type = GpuPassType::Compute;
50 pass->renderGraphBuilder = this;
51 pass->SetExecutionCallback(executionCallback);
52 pass->passIndex = passIndex;
53 pass->returnData = setupImmediateCallback(*pass);
54 return pass->returnData;
55 }
56
57 TransferRenderGraphBuilderPass* CreateTransferPass(
58 Grindstone::StringRef name,
59 std::function<void(Grindstone::Renderer::TransferRenderGraphBuilderPass&)> setupImmediateCallback
60 );
61
63 void CreatePresentPass(
64 std::function<void(Grindstone::Renderer::PresentRenderGraphBuilderPass&)> setupImmediateCallback
65 );
66
67 Grindstone::Renderer::RenderGraphBuilderResourceRef AddImage(ImageDescription imageDesc, Renderer::PassId passId = Renderer::invalidPassId);
68 Grindstone::Renderer::RenderGraphBuilderResourceRef AddBuffer(BufferDescription bufferDesc, Renderer::PassId passId = Renderer::invalidPassId);
69
71
72 void Clear();
73
74 using GetExternalImageCallback = std::function<Grindstone::GraphicsAPI::Image*>;
75 using GetExternalBufferCallback = std::function<Grindstone::GraphicsAPI::Buffer*>;
76
77 protected:
78
79 std::vector<Grindstone::UniquePtr<RenderGraphBuilderPass>> passes;
80 std::vector<UnionResourceDescription> resources;
81 ResourceId presentationResourceId = invalidResourceId;
82
83 };
84}
Definition RenderGraphBuilderPass.hpp:105
Definition RenderGraphBuilderPass.hpp:63
Definition RenderGraphBuilderPass.hpp:162
Definition RenderGraphBuilder.hpp:12
Definition RenderGraph.hpp:29
Definition RenderGraphBuilderPass.hpp:146
Definition BufferInfo.hpp:12
Definition AttachmentInfo.hpp:226
Definition AttachmentInfo.hpp:131
Definition RenderGraphResourceRef.hpp:51