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

@@ -11,6 +11,7 @@
#include <XCEngine/Rendering/Execution/CameraRenderer.h>
#include <XCEngine/Rendering/Execution/RenderPipelineHost.h>
#include <XCEngine/Rendering/Graph/RenderGraph.h>
#include <XCEngine/Rendering/Pipelines/BuiltinForwardPipeline.h>
#include <XCEngine/Rendering/Pipelines/ManagedScriptableRenderPipelineAsset.h>
#include <XCEngine/Rendering/Pipelines/ScriptableRenderPipelineHost.h>
#include <XCEngine/Rendering/RenderPassGraphContract.h>
@@ -22,6 +23,7 @@
#include <XCEngine/Scene/Scene.h>
#include "Rendering/Execution/Internal/CameraFrameGraph/SurfaceResolver.h"
#include "Rendering/Internal/RenderPipelineFactory.h"
#include <functional>
#include <memory>
#include <string>
@@ -4508,6 +4510,39 @@ TEST(ScriptableRenderPipelineHost_Test, BindsCurrentPipelineRendererIntoStageRec
host.GetPipelineRenderer());
}
TEST(
RenderPipelineFactory_Test,
NullPreferredAssetSkipsConfiguredManagedPipelineAssetWhenCreatingNativeSceneRenderer) {
Pipelines::ClearManagedRenderPipelineBridge();
Pipelines::ClearConfiguredManagedRenderPipelineAssetDescriptor();
const Pipelines::ManagedRenderPipelineAssetDescriptor descriptor = {
"GameScripts",
"Gameplay",
"ManagedRenderPipelineProbeAsset"
};
auto bridgeState = std::make_shared<MockManagedRenderPipelineBridgeState>();
Pipelines::SetManagedRenderPipelineBridge(
std::make_shared<MockManagedRenderPipelineBridge>(bridgeState));
Pipelines::SetConfiguredManagedRenderPipelineAssetDescriptor(descriptor);
std::shared_ptr<const RenderPipelineAsset> resolvedAsset = nullptr;
std::unique_ptr<NativeSceneRenderer> sceneRenderer =
Internal::CreateNativeSceneRendererFromAsset(
nullptr,
&resolvedAsset);
ASSERT_NE(sceneRenderer, nullptr);
EXPECT_EQ(resolvedAsset, nullptr);
EXPECT_NE(
dynamic_cast<Pipelines::BuiltinForwardPipeline*>(sceneRenderer.get()),
nullptr);
EXPECT_EQ(bridgeState->createAssetRuntimeCalls, 0);
Pipelines::ClearConfiguredManagedRenderPipelineAssetDescriptor();
Pipelines::ClearManagedRenderPipelineBridge();
}
TEST(
ScriptableRenderPipelineHost_Test,
FallsBackToRendererWhenStageRecorderDeclinesRecording) {