refactor(srp): let universal assets declare native backend keys

This commit is contained in:
2026-04-19 23:32:41 +08:00
parent 21b790c2f8
commit 9c8f2ae84c
9 changed files with 458 additions and 9 deletions

View File

@@ -41,6 +41,18 @@ std::shared_ptr<const RenderPipelineAsset> CreateFallbackRenderPipelineAsset() {
return std::make_shared<Pipelines::ScriptableRenderPipelineHostAsset>();
}
std::shared_ptr<const RenderPipelineAsset> CreatePipelineRendererAssetByKey(
const std::string& key) {
if (key == "BuiltinForward") {
static const std::shared_ptr<const RenderPipelineAsset>
s_builtinForwardPipelineAsset =
std::make_shared<Pipelines::BuiltinForwardPipelineAsset>();
return s_builtinForwardPipelineAsset;
}
return nullptr;
}
std::shared_ptr<const RenderPipelineAsset> ResolveRenderPipelineAssetOrDefault(
std::shared_ptr<const RenderPipelineAsset> preferredAsset) {
if (preferredAsset != nullptr) {
@@ -112,12 +124,10 @@ std::unique_ptr<RenderPipeline> CreateRenderPipelineOrDefault(
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)) {
TryCreateNativeSceneRendererFromAsset(preferredAsset)) {
if (outResolvedAsset != nullptr) {
*outResolvedAsset = resolvedAsset;
*outResolvedAsset = preferredAsset;
}
return sceneRenderer;
}

View File

@@ -1,5 +1,6 @@
#pragma once
#include <string>
#include <memory>
namespace XCEngine {
@@ -13,6 +14,8 @@ namespace Internal {
std::shared_ptr<const RenderPipelineAsset> CreateConfiguredRenderPipelineAsset();
std::shared_ptr<const RenderPipelineAsset> CreateFallbackRenderPipelineAsset();
std::shared_ptr<const RenderPipelineAsset> CreatePipelineRendererAssetByKey(
const std::string& key);
std::shared_ptr<const RenderPipelineAsset> ResolveRenderPipelineAssetOrDefault(
std::shared_ptr<const RenderPipelineAsset> preferredAsset);