refactor(srp): unify mono recorder backend ownership
This commit is contained in:
@@ -8,6 +8,31 @@ namespace XCEngine {
|
||||
namespace Rendering {
|
||||
namespace Internal {
|
||||
|
||||
namespace {
|
||||
|
||||
std::unique_ptr<NativeSceneRenderer> TryCreateNativeSceneRendererFromAsset(
|
||||
const std::shared_ptr<const RenderPipelineAsset>& asset) {
|
||||
if (asset == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::unique_ptr<RenderPipeline> pipeline = asset->CreatePipeline();
|
||||
if (pipeline == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
NativeSceneRenderer* const sceneRenderer =
|
||||
dynamic_cast<NativeSceneRenderer*>(pipeline.get());
|
||||
if (sceneRenderer == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
(void)pipeline.release();
|
||||
return std::unique_ptr<NativeSceneRenderer>(sceneRenderer);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
std::shared_ptr<const RenderPipelineAsset> CreateConfiguredRenderPipelineAsset() {
|
||||
return Pipelines::CreateConfiguredManagedRenderPipelineAsset();
|
||||
}
|
||||
@@ -84,6 +109,25 @@ std::unique_ptr<RenderPipeline> CreateRenderPipelineOrDefault(
|
||||
return std::make_unique<Pipelines::ScriptableRenderPipelineHost>();
|
||||
}
|
||||
|
||||
std::unique_ptr<NativeSceneRenderer> CreateNativeSceneRendererFromAsset(
|
||||
const std::shared_ptr<const RenderPipelineAsset>& preferredAsset,
|
||||
std::shared_ptr<const RenderPipelineAsset>* outResolvedAsset) {
|
||||
const std::shared_ptr<const RenderPipelineAsset> resolvedAsset =
|
||||
ResolveRenderPipelineAssetOrDefault(preferredAsset);
|
||||
if (std::unique_ptr<NativeSceneRenderer> sceneRenderer =
|
||||
TryCreateNativeSceneRendererFromAsset(resolvedAsset)) {
|
||||
if (outResolvedAsset != nullptr) {
|
||||
*outResolvedAsset = resolvedAsset;
|
||||
}
|
||||
return sceneRenderer;
|
||||
}
|
||||
|
||||
if (outResolvedAsset != nullptr) {
|
||||
outResolvedAsset->reset();
|
||||
}
|
||||
return CreateDefaultNativeSceneRenderer();
|
||||
}
|
||||
|
||||
std::unique_ptr<NativeSceneRenderer> CreateDefaultNativeSceneRenderer() {
|
||||
return std::make_unique<Pipelines::BuiltinForwardPipeline>();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user