#include "Rendering/Internal/RenderPipelineFactory.h" #include "Rendering/Pipelines/BuiltinForwardPipeline.h" #include "Rendering/Pipelines/ManagedScriptableRenderPipelineAsset.h" #include "Rendering/Pipelines/ScriptableRenderPipelineHost.h" namespace XCEngine { namespace Rendering { namespace Internal { std::shared_ptr CreateConfiguredRenderPipelineAsset() { return Pipelines::CreateConfiguredManagedRenderPipelineAsset(); } std::shared_ptr CreateFallbackRenderPipelineAsset() { return std::make_shared(); } std::shared_ptr ResolveRenderPipelineAssetOrDefault( std::shared_ptr preferredAsset) { if (preferredAsset != nullptr) { return std::move(preferredAsset); } if (std::shared_ptr configuredAsset = CreateConfiguredRenderPipelineAsset(); configuredAsset != nullptr) { return configuredAsset; } return CreateFallbackRenderPipelineAsset(); } std::unique_ptr CreateRenderPipelineOrDefault( const std::shared_ptr& preferredAsset, std::shared_ptr* outResolvedAsset) { const std::shared_ptr resolvedAsset = ResolveRenderPipelineAssetOrDefault(preferredAsset); if (resolvedAsset != nullptr) { if (std::unique_ptr pipeline = resolvedAsset->CreatePipeline()) { if (outResolvedAsset != nullptr) { *outResolvedAsset = resolvedAsset; } return pipeline; } } const std::shared_ptr defaultAsset = ResolveRenderPipelineAssetOrDefault(nullptr); if (defaultAsset != nullptr && defaultAsset != resolvedAsset) { if (std::unique_ptr pipeline = defaultAsset->CreatePipeline()) { if (outResolvedAsset != nullptr) { *outResolvedAsset = defaultAsset; } return pipeline; } } const std::shared_ptr fallbackAsset = CreateFallbackRenderPipelineAsset(); if (fallbackAsset != nullptr && fallbackAsset != resolvedAsset && fallbackAsset != defaultAsset) { if (std::unique_ptr pipeline = fallbackAsset->CreatePipeline()) { if (outResolvedAsset != nullptr) { *outResolvedAsset = fallbackAsset; } return pipeline; } } if (outResolvedAsset != nullptr) { *outResolvedAsset = fallbackAsset != nullptr ? fallbackAsset : (defaultAsset != nullptr ? defaultAsset : resolvedAsset); } return std::make_unique(); } std::unique_ptr CreateDefaultNativeSceneRenderer() { return std::make_unique(); } } // namespace Internal } // namespace Rendering } // namespace XCEngine