refactor(rendering): formalize pipeline selection and engine asset discovery
This commit is contained in:
@@ -8,15 +8,27 @@ namespace XCEngine {
|
||||
namespace Rendering {
|
||||
namespace Internal {
|
||||
|
||||
std::shared_ptr<const RenderPipelineAsset> CreateDefaultRenderPipelineAsset() {
|
||||
return Pipelines::CreateManagedOrDefaultScriptableRenderPipelineAsset();
|
||||
std::shared_ptr<const RenderPipelineAsset> CreateConfiguredRenderPipelineAsset() {
|
||||
return Pipelines::CreateConfiguredManagedRenderPipelineAsset();
|
||||
}
|
||||
|
||||
std::shared_ptr<const RenderPipelineAsset> CreateFallbackRenderPipelineAsset() {
|
||||
return std::make_shared<Pipelines::ScriptableRenderPipelineHostAsset>();
|
||||
}
|
||||
|
||||
std::shared_ptr<const RenderPipelineAsset> ResolveRenderPipelineAssetOrDefault(
|
||||
std::shared_ptr<const RenderPipelineAsset> preferredAsset) {
|
||||
return preferredAsset != nullptr
|
||||
? std::move(preferredAsset)
|
||||
: CreateDefaultRenderPipelineAsset();
|
||||
if (preferredAsset != nullptr) {
|
||||
return std::move(preferredAsset);
|
||||
}
|
||||
|
||||
if (std::shared_ptr<const RenderPipelineAsset> configuredAsset =
|
||||
CreateConfiguredRenderPipelineAsset();
|
||||
configuredAsset != nullptr) {
|
||||
return configuredAsset;
|
||||
}
|
||||
|
||||
return CreateFallbackRenderPipelineAsset();
|
||||
}
|
||||
|
||||
std::unique_ptr<RenderPipeline> CreateRenderPipelineOrDefault(
|
||||
@@ -34,10 +46,24 @@ std::unique_ptr<RenderPipeline> CreateRenderPipelineOrDefault(
|
||||
}
|
||||
}
|
||||
|
||||
const std::shared_ptr<const RenderPipelineAsset> defaultAsset =
|
||||
ResolveRenderPipelineAssetOrDefault(nullptr);
|
||||
if (defaultAsset != nullptr &&
|
||||
defaultAsset != resolvedAsset) {
|
||||
if (std::unique_ptr<RenderPipeline> pipeline =
|
||||
defaultAsset->CreatePipeline()) {
|
||||
if (outResolvedAsset != nullptr) {
|
||||
*outResolvedAsset = defaultAsset;
|
||||
}
|
||||
return pipeline;
|
||||
}
|
||||
}
|
||||
|
||||
const std::shared_ptr<const RenderPipelineAsset> fallbackAsset =
|
||||
CreateDefaultRenderPipelineAsset();
|
||||
CreateFallbackRenderPipelineAsset();
|
||||
if (fallbackAsset != nullptr &&
|
||||
fallbackAsset != resolvedAsset) {
|
||||
fallbackAsset != resolvedAsset &&
|
||||
fallbackAsset != defaultAsset) {
|
||||
if (std::unique_ptr<RenderPipeline> pipeline =
|
||||
fallbackAsset->CreatePipeline()) {
|
||||
if (outResolvedAsset != nullptr) {
|
||||
@@ -51,7 +77,9 @@ std::unique_ptr<RenderPipeline> CreateRenderPipelineOrDefault(
|
||||
*outResolvedAsset =
|
||||
fallbackAsset != nullptr
|
||||
? fallbackAsset
|
||||
: resolvedAsset;
|
||||
: (defaultAsset != nullptr
|
||||
? defaultAsset
|
||||
: resolvedAsset);
|
||||
}
|
||||
return std::make_unique<Pipelines::ScriptableRenderPipelineHost>();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user