refactor(rendering): extract default pipeline resolution from camera renderer

This commit is contained in:
2026-04-15 21:55:35 +08:00
parent e23d9710e7
commit cf1d6e1c1a
5 changed files with 133 additions and 42 deletions

View File

@@ -3,8 +3,7 @@
#include "Components/CameraComponent.h"
#include "Rendering/Execution/DirectionalShadowExecutionState.h"
#include "Rendering/Execution/Internal/CameraFrameGraph/Executor.h"
#include "Rendering/Pipelines/ManagedScriptableRenderPipelineAsset.h"
#include "Rendering/Pipelines/ScriptableRenderPipelineHost.h"
#include "Rendering/Internal/RenderPipelineFactory.h"
#include "Rendering/RenderPipelineAsset.h"
#include "Rendering/RenderSurface.h"
#include "Rendering/Shadow/DirectionalShadowRuntime.h"
@@ -13,40 +12,8 @@
namespace XCEngine {
namespace Rendering {
namespace {
std::shared_ptr<const RenderPipelineAsset> CreateDefaultPipelineAsset() {
return Pipelines::CreateManagedOrDefaultScriptableRenderPipelineAsset();
}
std::unique_ptr<RenderPipeline> CreatePipelineFromAsset(
const std::shared_ptr<const RenderPipelineAsset>& pipelineAsset) {
const std::shared_ptr<const RenderPipelineAsset> resolvedAsset =
pipelineAsset != nullptr ? pipelineAsset : CreateDefaultPipelineAsset();
if (resolvedAsset != nullptr) {
std::unique_ptr<RenderPipeline> pipeline = resolvedAsset->CreatePipeline();
if (pipeline != nullptr) {
return pipeline;
}
}
const std::shared_ptr<const RenderPipelineAsset> fallbackAsset =
CreateDefaultPipelineAsset();
if (fallbackAsset != nullptr &&
fallbackAsset != resolvedAsset) {
std::unique_ptr<RenderPipeline> pipeline = fallbackAsset->CreatePipeline();
if (pipeline != nullptr) {
return pipeline;
}
}
return std::make_unique<Pipelines::ScriptableRenderPipelineHost>();
}
} // namespace
CameraRenderer::CameraRenderer()
: CameraRenderer(CreateDefaultPipelineAsset()) {
: CameraRenderer(Internal::CreateDefaultRenderPipelineAsset()) {
}
CameraRenderer::CameraRenderer(std::unique_ptr<RenderPipeline> pipeline)
@@ -56,9 +23,8 @@ CameraRenderer::CameraRenderer(std::unique_ptr<RenderPipeline> pipeline)
}
CameraRenderer::CameraRenderer(std::shared_ptr<const RenderPipelineAsset> pipelineAsset)
: m_pipelineAsset(std::move(pipelineAsset))
, m_directionalShadowRuntime(std::make_unique<DirectionalShadowRuntime>()) {
SetPipelineAsset(m_pipelineAsset);
: m_directionalShadowRuntime(std::make_unique<DirectionalShadowRuntime>()) {
SetPipelineAsset(std::move(pipelineAsset));
}
CameraRenderer::~CameraRenderer() {
@@ -73,8 +39,10 @@ void CameraRenderer::SetPipeline(std::unique_ptr<RenderPipeline> pipeline) {
}
void CameraRenderer::SetPipelineAsset(std::shared_ptr<const RenderPipelineAsset> pipelineAsset) {
m_pipelineAsset = pipelineAsset != nullptr ? std::move(pipelineAsset) : CreateDefaultPipelineAsset();
ResetPipeline(CreatePipelineFromAsset(m_pipelineAsset));
ResetPipeline(
Internal::CreateRenderPipelineOrDefault(
pipelineAsset,
&m_pipelineAsset));
}
void CameraRenderer::ResetPipeline(std::unique_ptr<RenderPipeline> pipeline) {
@@ -84,8 +52,10 @@ void CameraRenderer::ResetPipeline(std::unique_ptr<RenderPipeline> pipeline) {
m_pipeline = std::move(pipeline);
if (m_pipeline == nullptr) {
m_pipelineAsset = CreateDefaultPipelineAsset();
m_pipeline = CreatePipelineFromAsset(m_pipelineAsset);
m_pipeline =
Internal::CreateRenderPipelineOrDefault(
nullptr,
&m_pipelineAsset);
}
}