fix(rendering): preserve managed SRP selection across scene replace
This commit is contained in:
@@ -414,6 +414,61 @@ TEST_F(
|
||||
EXPECT_EQ(host->GetStageRecorder(), nullptr);
|
||||
}
|
||||
|
||||
TEST_F(
|
||||
MonoScriptRuntimeTest,
|
||||
RuntimeSceneReplacePreservesManagedGraphicsSettingsSelection) {
|
||||
Scene* firstScene = CreateScene("ManagedRenderPipelineFirstScene");
|
||||
GameObject* selectionObject =
|
||||
firstScene->CreateGameObject("ManagedRenderPipelineSelection");
|
||||
ScriptComponent* selectionScript =
|
||||
AddScript(
|
||||
selectionObject,
|
||||
"Gameplay",
|
||||
"ManagedRenderPipelineRuntimeSelectionProbe");
|
||||
ASSERT_NE(selectionScript, nullptr);
|
||||
|
||||
engine->OnRuntimeStart(firstScene);
|
||||
engine->OnUpdate(0.016f);
|
||||
|
||||
const XCEngine::Rendering::Pipelines::ManagedRenderPipelineAssetDescriptor descriptorBeforeReplace =
|
||||
XCEngine::Rendering::Pipelines::GetManagedRenderPipelineAssetDescriptor();
|
||||
ASSERT_TRUE(descriptorBeforeReplace.IsValid());
|
||||
ASSERT_NE(descriptorBeforeReplace.managedAssetHandle, 0u);
|
||||
MonoObject* const managedAssetBeforeReplace =
|
||||
runtime->GetExternalManagedObject(
|
||||
descriptorBeforeReplace.managedAssetHandle);
|
||||
ASSERT_NE(managedAssetBeforeReplace, nullptr);
|
||||
|
||||
auto secondScene = std::make_unique<Scene>("ManagedRenderPipelineSecondScene");
|
||||
engine->OnRuntimeSceneReplaced(secondScene.get());
|
||||
scene = std::move(secondScene);
|
||||
|
||||
const XCEngine::Rendering::Pipelines::ManagedRenderPipelineAssetDescriptor descriptorAfterReplace =
|
||||
XCEngine::Rendering::Pipelines::GetManagedRenderPipelineAssetDescriptor();
|
||||
EXPECT_EQ(descriptorAfterReplace.assemblyName, descriptorBeforeReplace.assemblyName);
|
||||
EXPECT_EQ(descriptorAfterReplace.namespaceName, descriptorBeforeReplace.namespaceName);
|
||||
EXPECT_EQ(descriptorAfterReplace.className, descriptorBeforeReplace.className);
|
||||
EXPECT_EQ(
|
||||
descriptorAfterReplace.managedAssetHandle,
|
||||
descriptorBeforeReplace.managedAssetHandle);
|
||||
EXPECT_EQ(
|
||||
runtime->GetExternalManagedObject(
|
||||
descriptorAfterReplace.managedAssetHandle),
|
||||
managedAssetBeforeReplace);
|
||||
|
||||
XCEngine::Rendering::CameraRenderer renderer;
|
||||
const auto* pipelineAsset =
|
||||
dynamic_cast<
|
||||
const XCEngine::Rendering::Pipelines::ManagedScriptableRenderPipelineAsset*>(
|
||||
renderer.GetPipelineAsset());
|
||||
ASSERT_NE(pipelineAsset, nullptr);
|
||||
EXPECT_EQ(
|
||||
pipelineAsset->GetDescriptor().className,
|
||||
descriptorBeforeReplace.className);
|
||||
|
||||
engine->OnRuntimeStop();
|
||||
}
|
||||
|
||||
TEST_F(
|
||||
MonoScriptRuntimeTest,
|
||||
DefaultCameraRendererUsesManagedGraphicsSelectionToRecordMainSceneGraph) {
|
||||
|
||||
Reference in New Issue
Block a user