Rendering: formalize main-scene graph contract

This commit is contained in:
2026-04-15 07:56:00 +08:00
parent 8b156dd112
commit 2cda9fd24a
9 changed files with 276 additions and 59 deletions

View File

@@ -0,0 +1,95 @@
#include <XCEngine/Rendering/RenderPipelineMainSceneGraphContract.h>
#include <XCEngine/Rendering/Graph/RenderGraphRecordingContext.h>
#include <XCEngine/Rendering/SceneRenderFeatureHost.h>
#include <string>
#include <utility>
namespace XCEngine {
namespace Rendering {
namespace {
RenderGraphRecordingContext BuildCommonContext(
const RenderPipelineMainSceneRenderGraphContext& context,
Containers::String passName) {
return {
context.graphBuilder,
passName,
context.renderContext,
context.sceneData,
context.surfaceTemplate,
context.sourceSurface,
context.sourceColorView,
context.sourceColorState,
context.sourceColorTexture,
context.colorTargets,
context.depthTarget,
context.executionSucceeded,
context.blackboard
};
}
} // namespace
Containers::String BuildRenderPipelineMainScenePhasePassName(
const Containers::String& baseName,
ScenePhase scenePhase) {
std::string name = baseName.CStr();
if (!name.empty()) {
name += '.';
}
name += ToString(scenePhase);
return Containers::String(name.c_str());
}
bool RecordRenderPipelineMainSceneFeaturePasses(
const RenderPipelineMainSceneRenderGraphContext& context,
SceneRenderFeatureHost& featureHost,
SceneRenderInjectionPoint injectionPoint,
bool clearAttachments,
SceneRenderFeaturePassBeginCallback beginPassCallback,
SceneRenderFeaturePassEndCallback endPassCallback,
bool* recordedAnyPass) {
const SceneRenderFeaturePassRenderGraphContext featureContext =
BuildSceneRenderFeaturePassRenderGraphContext(
BuildCommonContext(context, context.passName),
clearAttachments,
beginPassCallback,
endPassCallback);
return featureHost.Record(
featureContext,
injectionPoint,
recordedAnyPass);
}
bool RecordRenderPipelineMainScenePhasePass(
const RenderPipelineMainSceneRenderGraphContext& context,
ScenePhase scenePhase,
RenderPassGraphExecutePassCallback executePassCallback,
RenderPassGraphBeginCallback beginPassCallback,
RenderPassGraphEndCallback endPassCallback,
std::vector<RenderGraphTextureHandle> additionalReadTextures) {
const RenderPassRenderGraphContext passContext =
BuildRenderPassRenderGraphContext(
BuildCommonContext(
context,
BuildRenderPipelineMainScenePhasePassName(
context.passName,
scenePhase)),
beginPassCallback,
endPassCallback);
return RecordCallbackRasterRenderPass(
passContext,
{
false,
true,
context.depthTarget.IsValid()
},
std::move(executePassCallback),
std::move(additionalReadTextures));
}
} // namespace Rendering
} // namespace XCEngine