けいブログ

端くれ描画プログラマによるNote

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);

(きっと続く)