refactor(rendering): formalize camera frame stage contracts

This commit is contained in:
2026-04-15 15:14:06 +08:00
parent 3937badf37
commit 795eaf80df
16 changed files with 558 additions and 296 deletions

View File

@@ -1,5 +1,8 @@
#include "Rendering/Pipelines/ScriptableRenderPipelineHost.h"
#include "Rendering/Passes/BuiltinDepthOnlyPass.h"
#include "Rendering/Passes/BuiltinObjectIdPass.h"
#include "Rendering/Passes/BuiltinShadowCasterPass.h"
#include "Rendering/Pipelines/BuiltinForwardPipeline.h"
namespace XCEngine {
@@ -29,6 +32,18 @@ std::unique_ptr<RenderPipelineRenderer> CreateMainSceneRendererFromAsset(
return std::make_unique<BuiltinForwardPipeline>();
}
void InstallDefaultStandaloneStagePasses(RenderPipeline& pipeline) {
pipeline.SetCameraFrameStandalonePass(
CameraFrameStage::ObjectId,
std::make_unique<Passes::BuiltinObjectIdPass>());
pipeline.SetCameraFrameStandalonePass(
CameraFrameStage::DepthOnly,
std::make_unique<Passes::BuiltinDepthOnlyPass>());
pipeline.SetCameraFrameStandalonePass(
CameraFrameStage::ShadowCaster,
std::make_unique<Passes::BuiltinShadowCasterPass>());
}
} // namespace
ScriptableRenderPipelineHost::ScriptableRenderPipelineHost()
@@ -37,6 +52,7 @@ ScriptableRenderPipelineHost::ScriptableRenderPipelineHost()
ScriptableRenderPipelineHost::ScriptableRenderPipelineHost(
std::unique_ptr<RenderPipelineRenderer> mainSceneRenderer) {
InstallDefaultStandaloneStagePasses(*this);
ResetMainSceneRenderer(std::move(mainSceneRenderer));
}
@@ -46,6 +62,7 @@ ScriptableRenderPipelineHost::ScriptableRenderPipelineHost(
mainSceneRendererAsset != nullptr
? std::move(mainSceneRendererAsset)
: CreateDefaultMainSceneRendererAsset()) {
InstallDefaultStandaloneStagePasses(*this);
ResetMainSceneRenderer(
CreateMainSceneRendererFromAsset(m_mainSceneRendererAsset));
}
@@ -79,6 +96,7 @@ void ScriptableRenderPipelineHost::Shutdown() {
if (m_mainSceneRenderer != nullptr) {
m_mainSceneRenderer->Shutdown();
}
ShutdownCameraFrameStandalonePasses();
}
bool ScriptableRenderPipelineHost::SupportsMainSceneRenderGraph() const {