fix(rendering): refresh managed pipelines on srp environment changes
This commit is contained in:
@@ -4912,6 +4912,37 @@ TEST(CameraRenderer_Test, DefaultPipelineAssetUsesManagedSelectionWhenPresent) {
|
||||
Pipelines::ClearManagedRenderPipelineAssetDescriptor();
|
||||
}
|
||||
|
||||
TEST(CameraRenderer_Test, DefaultPipelineAssetRefreshesWhenManagedSelectionChanges) {
|
||||
Pipelines::ClearManagedRenderPipelineAssetDescriptor();
|
||||
|
||||
CameraRenderer renderer;
|
||||
EXPECT_EQ(
|
||||
dynamic_cast<const Pipelines::ManagedScriptableRenderPipelineAsset*>(
|
||||
renderer.GetPipelineAsset()),
|
||||
nullptr);
|
||||
|
||||
const Pipelines::ManagedRenderPipelineAssetDescriptor descriptor = {
|
||||
"GameScripts",
|
||||
"Gameplay",
|
||||
"ManagedRenderPipelineProbeAsset"
|
||||
};
|
||||
Pipelines::SetManagedRenderPipelineAssetDescriptor(descriptor);
|
||||
|
||||
auto* managedAsset =
|
||||
dynamic_cast<const Pipelines::ManagedScriptableRenderPipelineAsset*>(
|
||||
renderer.GetPipelineAsset());
|
||||
ASSERT_NE(managedAsset, nullptr);
|
||||
EXPECT_EQ(managedAsset->GetDescriptor().assemblyName, "GameScripts");
|
||||
EXPECT_EQ(managedAsset->GetDescriptor().namespaceName, "Gameplay");
|
||||
EXPECT_EQ(managedAsset->GetDescriptor().className, "ManagedRenderPipelineProbeAsset");
|
||||
|
||||
Pipelines::ClearManagedRenderPipelineAssetDescriptor();
|
||||
EXPECT_EQ(
|
||||
dynamic_cast<const Pipelines::ManagedScriptableRenderPipelineAsset*>(
|
||||
renderer.GetPipelineAsset()),
|
||||
nullptr);
|
||||
}
|
||||
|
||||
TEST(CameraRenderer_Test, RebindsToResolvedDefaultAssetWhenPreferredAssetCannotCreatePipeline) {
|
||||
const Pipelines::ManagedRenderPipelineAssetDescriptor descriptor = {
|
||||
"GameScripts",
|
||||
@@ -4941,6 +4972,40 @@ TEST(CameraRenderer_Test, RebindsToResolvedDefaultAssetWhenPreferredAssetCannotC
|
||||
Pipelines::ClearManagedRenderPipelineAssetDescriptor();
|
||||
}
|
||||
|
||||
TEST(CameraRenderer_Test, RecreatesManagedPipelineWhenBridgeChanges) {
|
||||
Pipelines::ClearManagedRenderPipelineBridge();
|
||||
|
||||
const Pipelines::ManagedRenderPipelineAssetDescriptor descriptor = {
|
||||
"GameScripts",
|
||||
"Gameplay",
|
||||
"ManagedRenderPipelineProbeAsset"
|
||||
};
|
||||
|
||||
auto firstBridgeState = std::make_shared<MockManagedRenderPipelineBridgeState>();
|
||||
Pipelines::SetManagedRenderPipelineBridge(
|
||||
std::make_shared<MockManagedRenderPipelineBridge>(firstBridgeState));
|
||||
|
||||
CameraRenderer renderer(
|
||||
std::make_shared<Pipelines::ManagedScriptableRenderPipelineAsset>(
|
||||
descriptor));
|
||||
ASSERT_NE(
|
||||
dynamic_cast<Pipelines::ScriptableRenderPipelineHost*>(renderer.GetPipeline()),
|
||||
nullptr);
|
||||
EXPECT_EQ(firstBridgeState->createAssetRuntimeCalls, 1);
|
||||
|
||||
auto secondBridgeState = std::make_shared<MockManagedRenderPipelineBridgeState>();
|
||||
Pipelines::SetManagedRenderPipelineBridge(
|
||||
std::make_shared<MockManagedRenderPipelineBridge>(secondBridgeState));
|
||||
|
||||
auto* host =
|
||||
dynamic_cast<Pipelines::ScriptableRenderPipelineHost*>(renderer.GetPipeline());
|
||||
ASSERT_NE(host, nullptr);
|
||||
EXPECT_NE(host->GetStageRecorder(), nullptr);
|
||||
EXPECT_EQ(secondBridgeState->createAssetRuntimeCalls, 1);
|
||||
|
||||
Pipelines::ClearManagedRenderPipelineBridge();
|
||||
}
|
||||
|
||||
TEST(SceneRenderer_Test, CreatesPipelineInstancesFromPipelineAssetsAndShutsDownReplacedPipelines) {
|
||||
Scene scene("SceneRendererAssetScene");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user