fix(rendering): rebind managed srp asset runtime after bridge reset

This commit is contained in:
2026-04-18 01:01:30 +08:00
parent afb2c1579c
commit e388b6fbe3
3 changed files with 57 additions and 1 deletions

View File

@@ -4745,6 +4745,48 @@ TEST(ManagedScriptableRenderPipelineAsset_Test, ReusesManagedAssetRuntimeAcrossP
Pipelines::ClearManagedRenderPipelineBridge();
}
TEST(ManagedScriptableRenderPipelineAsset_Test, RebindsManagedAssetRuntimeWhenBridgeChanges) {
Pipelines::ClearManagedRenderPipelineBridge();
const Pipelines::ManagedRenderPipelineAssetDescriptor descriptor = {
"GameScripts",
"Gameplay",
"ManagedRenderPipelineProbeAsset"
};
auto firstBridgeState = std::make_shared<MockManagedRenderPipelineBridgeState>();
Pipelines::SetManagedRenderPipelineBridge(
std::make_shared<MockManagedRenderPipelineBridge>(firstBridgeState));
Pipelines::ManagedScriptableRenderPipelineAsset asset(descriptor);
std::unique_ptr<RenderPipeline> firstPipeline = asset.CreatePipeline();
ASSERT_NE(firstPipeline, nullptr);
ASSERT_NE(firstBridgeState->lastCreatedRuntimeState, nullptr);
EXPECT_EQ(firstBridgeState->createAssetRuntimeCalls, 1);
EXPECT_EQ(firstBridgeState->lastCreatedRuntimeState->createStageRecorderCalls, 1);
auto secondBridgeState = std::make_shared<MockManagedRenderPipelineBridgeState>();
Pipelines::SetManagedRenderPipelineBridge(
std::make_shared<MockManagedRenderPipelineBridge>(secondBridgeState));
std::unique_ptr<RenderPipeline> secondPipeline = asset.CreatePipeline();
ASSERT_NE(secondPipeline, nullptr);
ASSERT_NE(secondBridgeState->lastCreatedRuntimeState, nullptr);
EXPECT_EQ(secondBridgeState->createAssetRuntimeCalls, 1);
EXPECT_EQ(secondBridgeState->lastCreatedRuntimeState->createStageRecorderCalls, 1);
EXPECT_NE(
secondBridgeState->lastCreatedRuntimeState.get(),
firstBridgeState->lastCreatedRuntimeState.get());
auto* secondHost =
dynamic_cast<Pipelines::ScriptableRenderPipelineHost*>(secondPipeline.get());
ASSERT_NE(secondHost, nullptr);
EXPECT_NE(secondHost->GetStageRecorder(), nullptr);
Pipelines::ClearManagedRenderPipelineBridge();
}
TEST(CameraRenderer_Test, RendersManagedRequestedPostProcessWithoutLegacySequence) {
Scene scene("CameraRendererManagedRequestedPostProcessScene");