feat(scripting): add managed SRP runtime bridge

This commit is contained in:
2026-04-17 21:38:22 +08:00
parent 8f847db816
commit f4fb859972
6 changed files with 908 additions and 4 deletions

View File

@@ -4253,6 +4253,60 @@ TEST(ScriptableRenderPipelineHost_Test, PrefersStageRecorderBeforeFallbackRender
EXPECT_EQ(replacementRecorderState->shutdownCalls, 1);
}
TEST(
ScriptableRenderPipelineHost_Test,
FallsBackToRendererWhenStageRecorderDeclinesRecording) {
auto rendererState = std::make_shared<MockPipelineState>();
auto recorderState = std::make_shared<MockStageRecorderState>();
rendererState->supportsMainSceneRenderGraph = true;
recorderState->supportsMainSceneRenderGraph = true;
recorderState->recordMainSceneResult = false;
Pipelines::ScriptableRenderPipelineHost host(
std::make_unique<MockPipeline>(rendererState));
host.SetStageRecorder(
std::make_unique<MockStageRecorder>(recorderState));
Scene scene("ScriptableRenderPipelineFallbackScene");
GameObject* cameraObject = scene.CreateGameObject("Camera");
auto* camera = cameraObject->AddComponent<CameraComponent>();
camera->SetPrimary(true);
camera->SetDepth(1.0f);
const RenderContext context = CreateValidContext();
const RenderSurface surface(800, 600);
RenderSceneData sceneData =
CreateSceneDataForCamera(scene, *camera, surface);
RenderGraph graph = {};
RenderGraphBuilder graphBuilder(graph);
RenderGraphBlackboard blackboard = {};
bool executionSucceeded = true;
const RenderPipelineStageRenderGraphContext graphContext = {
graphBuilder,
"MainScene",
CameraFrameStage::MainScene,
context,
sceneData,
surface,
nullptr,
nullptr,
XCEngine::RHI::ResourceStates::Common,
{},
{},
{},
&executionSucceeded,
&blackboard
};
EXPECT_TRUE(host.SupportsStageRenderGraph(CameraFrameStage::MainScene));
EXPECT_TRUE(host.RecordStageRenderGraph(graphContext));
EXPECT_EQ(recorderState->recordMainSceneCalls, 1);
EXPECT_EQ(rendererState->recordMainSceneCalls, 1);
EXPECT_TRUE(recorderState->lastReceivedRenderGraphBlackboard);
EXPECT_TRUE(rendererState->lastReceivedRenderGraphBlackboard);
}
TEST(ScriptableRenderPipelineHost_Test, DirectHostDoesNotInstallBuiltinStandaloneStagePasses) {
auto rendererState = std::make_shared<MockPipelineState>();
Pipelines::ScriptableRenderPipelineHost host(