refactor(srp): unify mono recorder backend ownership

This commit is contained in:
2026-04-19 23:09:34 +08:00
parent 74e790891c
commit 21b790c2f8
9 changed files with 352 additions and 9 deletions

View File

@@ -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>();
}