61 lines
2.0 KiB
C++
61 lines
2.0 KiB
C++
|
|
#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
|