#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 CreateDefaultRenderPipelineAsset() { return Pipelines::CreateManagedOrDefaultScriptableRenderPipelineAsset(); } std::shared_ptr ResolveRenderPipelineAssetOrDefault( std::shared_ptr preferredAsset) { return preferredAsset != nullptr ? std::move(preferredAsset) : CreateDefaultRenderPipelineAsset(); } 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 fallbackAsset = CreateDefaultRenderPipelineAsset(); if (fallbackAsset != nullptr && fallbackAsset != resolvedAsset) { if (std::unique_ptr pipeline = fallbackAsset->CreatePipeline()) { if (outResolvedAsset != nullptr) { *outResolvedAsset = fallbackAsset; } return pipeline; } } if (outResolvedAsset != nullptr) { *outResolvedAsset = fallbackAsset != nullptr ? fallbackAsset : resolvedAsset; } return std::make_unique(); } std::unique_ptr CreateDefaultNativeSceneRenderer() { return std::make_unique(); } } // namespace Internal } // namespace Rendering } // namespace XCEngine