2026-04-15 21:55:35 +08:00
|
|
|
#include "Rendering/Internal/RenderPipelineFactory.h"
|
|
|
|
|
|
2026-04-18 01:24:21 +08:00
|
|
|
#include "Rendering/Pipelines/BuiltinForwardPipeline.h"
|
2026-04-15 21:55:35 +08:00
|
|
|
#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>();
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-18 01:24:21 +08:00
|
|
|
std::unique_ptr<NativeSceneRenderer> CreateDefaultNativeSceneRenderer() {
|
|
|
|
|
return std::make_unique<Pipelines::BuiltinForwardPipeline>();
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-15 21:55:35 +08:00
|
|
|
} // namespace Internal
|
|
|
|
|
} // namespace Rendering
|
|
|
|
|
} // namespace XCEngine
|