From f26b0024f2a44cbee2312e1c350e31c6ec3b16ad Mon Sep 17 00:00:00 2001 From: ssdfasd <2156608475@qq.com> Date: Tue, 14 Apr 2026 23:38:22 +0800 Subject: [PATCH] Move camera frame render-graph lifecycle into execution module --- .../CameraFrameRenderGraphExecution.cpp | 48 +++++++++++++++++-- .../CameraFrameRenderGraphStageRecording.cpp | 43 +++-------------- .../CameraFrameRenderGraphStageRecording.h | 15 +++--- 3 files changed, 57 insertions(+), 49 deletions(-) diff --git a/engine/src/Rendering/Execution/Internal/CameraFrameRenderGraphExecution.cpp b/engine/src/Rendering/Execution/Internal/CameraFrameRenderGraphExecution.cpp index 25e145d3..60019d50 100644 --- a/engine/src/Rendering/Execution/Internal/CameraFrameRenderGraphExecution.cpp +++ b/engine/src/Rendering/Execution/Internal/CameraFrameRenderGraphExecution.cpp @@ -1,7 +1,12 @@ #include "Rendering/Execution/Internal/CameraFrameRenderGraphExecution.h" +#include "Debug/Logger.h" #include "Rendering/Execution/DirectionalShadowExecutionState.h" #include "Rendering/Execution/Internal/CameraFrameRenderGraphStageRecording.h" +#include "Rendering/Execution/Internal/CameraFrameRenderGraphStageRuntime.h" +#include "Rendering/Graph/RenderGraph.h" +#include "Rendering/Graph/RenderGraphCompiler.h" +#include "Rendering/Graph/RenderGraphExecutor.h" namespace XCEngine { namespace Rendering { @@ -14,14 +19,47 @@ bool ExecuteCameraFrameRenderGraphPlan( RenderPass* objectIdPass, RenderPass* depthOnlyPass, RenderPass* shadowCasterPass) { - return ExecuteCameraFrameRenderGraphStages( + RenderGraph graph = {}; + RenderGraphBuilder graphBuilder(graph); + RenderGraphBlackboard blackboard = {}; + + CameraFrameExecutionState executionState = {}; + executionState.pipeline = pipeline; + executionState.objectIdPass = objectIdPass; + executionState.depthOnlyPass = depthOnlyPass; + executionState.shadowCasterPass = shadowCasterPass; + + bool stageExecutionSucceeded = true; + if (!RecordCameraFrameRenderGraphStages( plan, shadowState, sceneData, - pipeline, - objectIdPass, - depthOnlyPass, - shadowCasterPass); + executionState, + graphBuilder, + blackboard, + stageExecutionSucceeded)) { + return false; + } + + CompiledRenderGraph compiledGraph = {}; + Containers::String errorMessage; + if (!RenderGraphCompiler::Compile(graph, compiledGraph, &errorMessage)) { + Debug::Logger::Get().Error( + Debug::LogCategory::Rendering, + Containers::String("CameraRenderer::Render failed: RenderGraph compile failed: ") + + errorMessage); + return false; + } + + if (!RenderGraphExecutor::Execute(compiledGraph, plan.request.context, &errorMessage)) { + Debug::Logger::Get().Error( + Debug::LogCategory::Rendering, + Containers::String("CameraRenderer::Render failed: RenderGraph execute failed: ") + + errorMessage); + return false; + } + + return stageExecutionSucceeded; } } // namespace Rendering diff --git a/engine/src/Rendering/Execution/Internal/CameraFrameRenderGraphStageRecording.cpp b/engine/src/Rendering/Execution/Internal/CameraFrameRenderGraphStageRecording.cpp index dbe3e52a..ea6a0e47 100644 --- a/engine/src/Rendering/Execution/Internal/CameraFrameRenderGraphStageRecording.cpp +++ b/engine/src/Rendering/Execution/Internal/CameraFrameRenderGraphStageRecording.cpp @@ -1,6 +1,5 @@ #include "Rendering/Execution/Internal/CameraFrameRenderGraphStageRecording.h" -#include "Debug/Logger.h" #include "Rendering/Execution/CameraFrameRenderGraphResources.h" #include "Rendering/Execution/CameraFrameRenderGraphStagePolicy.h" #include "Rendering/Execution/Internal/CameraFrameRenderGraphStagePassRecording.h" @@ -8,34 +7,22 @@ #include "Rendering/Execution/Internal/CameraFrameRenderGraphStageSequenceRecording.h" #include "Rendering/Execution/Internal/CameraFrameRenderGraphStageState.h" #include "Rendering/Graph/RenderGraph.h" -#include "Rendering/Graph/RenderGraphCompiler.h" -#include "Rendering/Graph/RenderGraphExecutor.h" namespace XCEngine { namespace Rendering { -bool ExecuteCameraFrameRenderGraphStages( +bool RecordCameraFrameRenderGraphStages( const CameraFramePlan& plan, const DirectionalShadowExecutionState& shadowState, const RenderSceneData& sceneData, - RenderPipeline* pipeline, - RenderPass* objectIdPass, - RenderPass* depthOnlyPass, - RenderPass* shadowCasterPass) { - RenderGraph graph = {}; - RenderGraphBuilder graphBuilder(graph); - RenderGraphBlackboard blackboard = {}; + CameraFrameExecutionState& executionState, + RenderGraphBuilder& graphBuilder, + RenderGraphBlackboard& blackboard, + bool& stageExecutionSucceeded) { CameraFrameRenderGraphResources& frameResources = blackboard.Emplace(); - CameraFrameExecutionState executionState = {}; - executionState.pipeline = pipeline; - executionState.objectIdPass = objectIdPass; - executionState.depthOnlyPass = depthOnlyPass; - executionState.shadowCasterPass = shadowCasterPass; - RenderGraphImportedTextureRegistry importedTextures = {}; - bool stageExecutionSucceeded = true; for (const CameraFrameStageInfo& stageInfo : kOrderedCameraFrameStages) { if (!plan.HasFrameStage(stageInfo.stage) && stageInfo.stage != CameraFrameStage::MainScene) { @@ -112,25 +99,7 @@ bool ExecuteCameraFrameRenderGraphStages( stageExecutionSucceeded); } - CompiledRenderGraph compiledGraph = {}; - Containers::String errorMessage; - if (!RenderGraphCompiler::Compile(graph, compiledGraph, &errorMessage)) { - Debug::Logger::Get().Error( - Debug::LogCategory::Rendering, - Containers::String("CameraRenderer::Render failed: RenderGraph compile failed: ") + - errorMessage); - return false; - } - - if (!RenderGraphExecutor::Execute(compiledGraph, plan.request.context, &errorMessage)) { - Debug::Logger::Get().Error( - Debug::LogCategory::Rendering, - Containers::String("CameraRenderer::Render failed: RenderGraph execute failed: ") + - errorMessage); - return false; - } - - return stageExecutionSucceeded; + return true; } } // namespace Rendering diff --git a/engine/src/Rendering/Execution/Internal/CameraFrameRenderGraphStageRecording.h b/engine/src/Rendering/Execution/Internal/CameraFrameRenderGraphStageRecording.h index 5ee076f1..e52ffa6c 100644 --- a/engine/src/Rendering/Execution/Internal/CameraFrameRenderGraphStageRecording.h +++ b/engine/src/Rendering/Execution/Internal/CameraFrameRenderGraphStageRecording.h @@ -1,22 +1,23 @@ #pragma once #include -#include -#include namespace XCEngine { namespace Rendering { +struct CameraFrameExecutionState; struct DirectionalShadowExecutionState; +class RenderGraphBuilder; +class RenderGraphBlackboard; -bool ExecuteCameraFrameRenderGraphStages( +bool RecordCameraFrameRenderGraphStages( const CameraFramePlan& plan, const DirectionalShadowExecutionState& shadowState, const RenderSceneData& sceneData, - RenderPipeline* pipeline, - RenderPass* objectIdPass, - RenderPass* depthOnlyPass, - RenderPass* shadowCasterPass); + CameraFrameExecutionState& executionState, + RenderGraphBuilder& graphBuilder, + RenderGraphBlackboard& blackboard, + bool& stageExecutionSucceeded); } // namespace Rendering } // namespace XCEngine