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

@@ -0,0 +1,60 @@
#include "Rendering/Internal/RenderPipelineFactory.h"
#include "Rendering/Pipelines/ManagedScriptableRenderPipelineAsset.h"
#include "Rendering/Pipelines/ScriptableRenderPipelineHost.h"
namespace XCEngine {
namespace Rendering {
namespace Internal {
std::shared_ptr<const RenderPipelineAsset> CreateDefaultRenderPipelineAsset() {
return Pipelines::CreateManagedOrDefaultScriptableRenderPipelineAsset();
}
std::shared_ptr<const RenderPipelineAsset> ResolveRenderPipelineAssetOrDefault(
std::shared_ptr<const RenderPipelineAsset> preferredAsset) {
return preferredAsset != nullptr
? std::move(preferredAsset)
: CreateDefaultRenderPipelineAsset();
}
std::unique_ptr<RenderPipeline> CreateRenderPipelineOrDefault(
const std::shared_ptr<const RenderPipelineAsset>& preferredAsset,
std::shared_ptr<const RenderPipelineAsset>* outResolvedAsset) {
const std::shared_ptr<const RenderPipelineAsset> resolvedAsset =
ResolveRenderPipelineAssetOrDefault(preferredAsset);
if (resolvedAsset != nullptr) {
if (std::unique_ptr<RenderPipeline> pipeline =
resolvedAsset->CreatePipeline()) {
if (outResolvedAsset != nullptr) {
*outResolvedAsset = resolvedAsset;
}
return pipeline;
}
}
const std::shared_ptr<const RenderPipelineAsset> fallbackAsset =
CreateDefaultRenderPipelineAsset();
if (fallbackAsset != nullptr &&
fallbackAsset != resolvedAsset) {
if (std::unique_ptr<RenderPipeline> pipeline =
fallbackAsset->CreatePipeline()) {
if (outResolvedAsset != nullptr) {
*outResolvedAsset = fallbackAsset;
}
return pipeline;
}
}
if (outResolvedAsset != nullptr) {
*outResolvedAsset =
fallbackAsset != nullptr
? fallbackAsset
: resolvedAsset;
}
return std::make_unique<Pipelines::ScriptableRenderPipelineHost>();
}
} // namespace Internal
} // namespace Rendering
} // namespace XCEngine