RenderGraphその1
フレームワークのためにRenderGraph的なものを実装してみようと思います。
依存関係に基づいた実行順の決定やリソース管理をする役割を担います。
利用側のコードは以下のようなものを想定してみます。
//-- RenderGraph 構築 renderGraph->AddRenderPass("GBuffer"sv, std::make_shared<GBufferPass>()); renderGraph->AddRenderPass("SSAO"sv, std::make_shared<SSAOPass>()); renderGraph->AddRenderPass("Lighting"sv, std::make_shared<LightingPass>()); renderGraph->AddRenderPass("ColorGrading"sv, std::make_shared<ColorGradingPass>()); // (-> SSAO) renderGraph->AddConnection("GBuffer.normal"sv, "SSAO.normal"sv); renderGraph->AddConnection("GBuffer.depth"sv, "SSAO.depth"sv); // (-> Lighting) renderGraph->AddConnection("GBuffer.color"sv, "Lighting.color"sv); renderGraph->AddConnection("GBuffer.normal"sv, "Lighting.normal"sv); renderGraph->AddConnection("GBuffer.depth"sv, "Lighting.depth"sv); renderGraph->AddConnection("SSAO.dst"sv, "Lighting.ao"sv); // (-> ColorGrading) renderGraph->AddConnection("Lighting.dst"sv, "ColorGrading.src"sv); // (-> End) renderGraph->MarkEnd("ColorGrading.dst"sv); //-- RenderGraph コンパイル renderGraph->Compile(); //-- RenderGraph 実行 renderGraph->Execute(*context);
(きっと続く)