refactor(srp): move native scene feature registration into backend setup

This commit is contained in:
2026-04-21 23:06:17 +08:00
parent f1d7e879ac
commit a2d21e69b6
6 changed files with 122 additions and 13 deletions

View File

@@ -5,6 +5,7 @@
#include "Rendering/Execution/DirectionalShadowExecutionState.h"
#include "Rendering/Pipelines/BuiltinForwardPipeline.h"
#include "Rendering/Pipelines/Internal/BuiltinForwardSceneSetup.h"
#include "Rendering/Pipelines/ManagedScriptableRenderPipelineAsset.h"
#include "Rendering/Pipelines/ScriptableRenderPipelineHost.h"
#include "Rendering/Passes/BuiltinDepthOnlyPass.h"
@@ -160,7 +161,14 @@ std::unique_ptr<SceneDrawBackend> CreateSceneDrawBackendFromAsset(
}
std::unique_ptr<SceneDrawBackend> CreateDefaultSceneDrawBackend() {
return std::make_unique<Pipelines::BuiltinForwardPipeline>();
if (std::unique_ptr<SceneDrawBackend> sceneDrawBackend =
TryCreateSceneDrawBackendFromAsset(
CreateDefaultPipelineBackendAsset());
sceneDrawBackend != nullptr) {
return sceneDrawBackend;
}
return Pipelines::Internal::CreateConfiguredBuiltinForwardPipeline();
}
} // namespace Internal

View File

@@ -6,9 +6,7 @@ namespace XCEngine {
namespace Rendering {
namespace Pipelines {
BuiltinForwardPipeline::BuiltinForwardPipeline() {
Internal::RegisterBuiltinForwardSceneFeatures(m_forwardSceneFeatureHost);
}
BuiltinForwardPipeline::BuiltinForwardPipeline() = default;
BuiltinForwardPipeline::~BuiltinForwardPipeline() {
Shutdown();
@@ -28,7 +26,7 @@ SceneRenderFeaturePass* BuiltinForwardPipeline::GetForwardSceneFeaturePass(size_
}
std::unique_ptr<RenderPipeline> BuiltinForwardPipelineAsset::CreatePipeline() const {
return std::make_unique<BuiltinForwardPipeline>();
return Internal::CreateConfiguredBuiltinForwardPipeline();
}
} // namespace Pipelines

View File

@@ -2,7 +2,7 @@
#include "Rendering/Features/BuiltinGaussianSplatPass.h"
#include "Rendering/Features/BuiltinVolumetricPass.h"
#include "Rendering/SceneRenderFeatureHost.h"
#include "Rendering/Pipelines/BuiltinForwardPipeline.h"
#include <memory>
@@ -11,9 +11,20 @@ namespace Rendering {
namespace Pipelines {
namespace Internal {
void RegisterBuiltinForwardSceneFeatures(SceneRenderFeatureHost& featureHost) {
featureHost.AddFeaturePass(std::make_unique<Features::BuiltinGaussianSplatPass>());
featureHost.AddFeaturePass(std::make_unique<Features::BuiltinVolumetricPass>());
void ConfigureBuiltinForwardPipeline(
BuiltinForwardPipeline& pipeline) {
pipeline.AddForwardSceneFeaturePass(
std::make_unique<Features::BuiltinGaussianSplatPass>());
pipeline.AddForwardSceneFeaturePass(
std::make_unique<Features::BuiltinVolumetricPass>());
}
std::unique_ptr<BuiltinForwardPipeline>
CreateConfiguredBuiltinForwardPipeline() {
std::unique_ptr<BuiltinForwardPipeline> pipeline =
std::make_unique<BuiltinForwardPipeline>();
ConfigureBuiltinForwardPipeline(*pipeline);
return pipeline;
}
} // namespace Internal

View File

@@ -1,14 +1,19 @@
#pragma once
#include <memory>
namespace XCEngine {
namespace Rendering {
class SceneRenderFeatureHost;
namespace Pipelines {
class BuiltinForwardPipeline;
namespace Internal {
void RegisterBuiltinForwardSceneFeatures(SceneRenderFeatureHost& featureHost);
void ConfigureBuiltinForwardPipeline(
BuiltinForwardPipeline& pipeline);
std::unique_ptr<BuiltinForwardPipeline>
CreateConfiguredBuiltinForwardPipeline();
} // namespace Internal
} // namespace Pipelines

View File

@@ -3,6 +3,7 @@
#include "Rendering/Execution/DirectionalShadowExecutionState.h"
#include "Rendering/Internal/RenderPipelineFactory.h"
#include "Rendering/Pipelines/BuiltinForwardPipeline.h"
#include "Rendering/Pipelines/Internal/BuiltinForwardSceneSetup.h"
#include "Rendering/Pipelines/ManagedScriptableRenderPipelineAsset.h"
#include "Rendering/Passes/BuiltinDepthOnlyPass.h"
#include "Rendering/Passes/BuiltinObjectIdPass.h"
@@ -30,7 +31,7 @@ std::unique_ptr<RenderPipelineBackend> CreatePipelineBackendFromAsset(
}
}
return std::make_unique<BuiltinForwardPipeline>();
return Internal::CreateConfiguredBuiltinForwardPipeline();
}
} // namespace