refactor(rendering): formalize pipeline selection and engine asset discovery

This commit is contained in:
2026-04-19 04:31:48 +08:00
parent 78bcd2e9ca
commit 48bfde28e3
17 changed files with 294 additions and 121 deletions

View File

@@ -133,7 +133,7 @@ protected:
engine->SetRuntimeFixedDeltaTime(ScriptEngine::DefaultFixedDeltaTime);
XCEngine::Input::InputManager::Get().Shutdown();
XCEngine::Resources::ResourceManager::Get().Shutdown();
XCEngine::Rendering::Pipelines::ClearManagedRenderPipelineAssetDescriptor();
XCEngine::Rendering::Pipelines::ClearConfiguredManagedRenderPipelineAssetDescriptor();
runtime = std::make_unique<MonoScriptRuntime>(CreateMonoSettings());
ASSERT_TRUE(runtime->Initialize()) << runtime->GetLastError();
@@ -145,7 +145,7 @@ protected:
engine->OnRuntimeStop();
engine->SetRuntime(nullptr);
XCEngine::Input::InputManager::Get().Shutdown();
XCEngine::Rendering::Pipelines::ClearManagedRenderPipelineAssetDescriptor();
XCEngine::Rendering::Pipelines::ClearConfiguredManagedRenderPipelineAssetDescriptor();
runtime.reset();
scene.reset();
XCEngine::Resources::ResourceManager::Get().Shutdown();
@@ -235,6 +235,15 @@ TEST_F(
return lhs.className < rhs.className;
}));
EXPECT_NE(
std::find(
classes.begin(),
classes.end(),
ScriptClassDescriptor{
"XCEngine.ScriptCore",
"XCEngine.Rendering.FirstParty",
"ForwardRenderPipelineAsset"}),
classes.end());
EXPECT_NE(
std::find(
classes.begin(),
@@ -376,7 +385,7 @@ TEST_F(MonoScriptRuntimeTest, ManagedGraphicsSettingsRoundTripsRenderPipelineAss
engine->OnUpdate(0.016f);
const XCEngine::Rendering::Pipelines::ManagedRenderPipelineAssetDescriptor descriptor =
XCEngine::Rendering::Pipelines::GetManagedRenderPipelineAssetDescriptor();
XCEngine::Rendering::Pipelines::GetConfiguredManagedRenderPipelineAssetDescriptor();
EXPECT_EQ(descriptor.assemblyName, "GameScripts");
EXPECT_EQ(descriptor.namespaceName, "Gameplay");
EXPECT_EQ(descriptor.className, "RenderPipelineApiProbeAsset");
@@ -428,9 +437,9 @@ TEST_F(
engine->OnUpdate(0.016f);
const XCEngine::Rendering::Pipelines::ManagedRenderPipelineAssetDescriptor descriptor =
XCEngine::Rendering::Pipelines::GetManagedRenderPipelineAssetDescriptor();
XCEngine::Rendering::Pipelines::GetConfiguredManagedRenderPipelineAssetDescriptor();
EXPECT_EQ(descriptor.assemblyName, "XCEngine.ScriptCore");
EXPECT_EQ(descriptor.namespaceName, "XCEngine");
EXPECT_EQ(descriptor.namespaceName, "XCEngine.Rendering.FirstParty");
EXPECT_EQ(descriptor.className, "ForwardRenderPipelineAsset");
EXPECT_NE(descriptor.managedAssetHandle, 0u);
@@ -448,14 +457,14 @@ TEST_F(
selectedPipelineAssetTypeName));
EXPECT_EQ(
selectedPipelineAssetTypeName,
"XCEngine.ForwardRenderPipelineAsset");
"XCEngine.Rendering.FirstParty.ForwardRenderPipelineAsset");
EXPECT_TRUE(runtime->TryGetFieldValue(
script,
"SelectedRendererDataTypeName",
selectedRendererDataTypeName));
EXPECT_EQ(
selectedRendererDataTypeName,
"XCEngine.ForwardRendererData");
"XCEngine.Rendering.FirstParty.ForwardRendererData");
}
TEST_F(
@@ -477,7 +486,7 @@ TEST_F(
configuredDescriptor.assemblyName = "GameScripts";
configuredDescriptor.namespaceName = "Gameplay";
configuredDescriptor.className = "RenderPipelineApiProbeAsset";
XCEngine::Rendering::Pipelines::SetManagedRenderPipelineAssetDescriptor(
XCEngine::Rendering::Pipelines::SetConfiguredManagedRenderPipelineAssetDescriptor(
configuredDescriptor);
engine->OnRuntimeStart(runtimeScene);
@@ -485,7 +494,7 @@ TEST_F(
const XCEngine::Rendering::Pipelines::ManagedRenderPipelineAssetDescriptor
resolvedDescriptor =
XCEngine::Rendering::Pipelines::GetManagedRenderPipelineAssetDescriptor();
XCEngine::Rendering::Pipelines::GetConfiguredManagedRenderPipelineAssetDescriptor();
EXPECT_EQ(resolvedDescriptor.assemblyName, configuredDescriptor.assemblyName);
EXPECT_EQ(resolvedDescriptor.namespaceName, configuredDescriptor.namespaceName);
EXPECT_EQ(resolvedDescriptor.className, configuredDescriptor.className);
@@ -524,7 +533,7 @@ TEST_F(
engine->OnUpdate(0.016f);
const XCEngine::Rendering::Pipelines::ManagedRenderPipelineAssetDescriptor descriptorBeforeStop =
XCEngine::Rendering::Pipelines::GetManagedRenderPipelineAssetDescriptor();
XCEngine::Rendering::Pipelines::GetConfiguredManagedRenderPipelineAssetDescriptor();
ASSERT_TRUE(descriptorBeforeStop.IsValid());
ASSERT_NE(descriptorBeforeStop.managedAssetHandle, 0u);
ASSERT_NE(
@@ -535,7 +544,7 @@ TEST_F(
engine->OnRuntimeStop();
const XCEngine::Rendering::Pipelines::ManagedRenderPipelineAssetDescriptor descriptorAfterStop =
XCEngine::Rendering::Pipelines::GetManagedRenderPipelineAssetDescriptor();
XCEngine::Rendering::Pipelines::GetConfiguredManagedRenderPipelineAssetDescriptor();
EXPECT_FALSE(descriptorAfterStop.IsValid());
EXPECT_EQ(descriptorAfterStop.managedAssetHandle, 0u);
EXPECT_EQ(
@@ -599,7 +608,7 @@ TEST_F(
engine->OnUpdate(0.016f);
const XCEngine::Rendering::Pipelines::ManagedRenderPipelineAssetDescriptor descriptorBeforeReplace =
XCEngine::Rendering::Pipelines::GetManagedRenderPipelineAssetDescriptor();
XCEngine::Rendering::Pipelines::GetConfiguredManagedRenderPipelineAssetDescriptor();
ASSERT_TRUE(descriptorBeforeReplace.IsValid());
ASSERT_NE(descriptorBeforeReplace.managedAssetHandle, 0u);
MonoObject* const managedAssetBeforeReplace =
@@ -612,7 +621,7 @@ TEST_F(
scene = std::move(secondScene);
const XCEngine::Rendering::Pipelines::ManagedRenderPipelineAssetDescriptor descriptorAfterReplace =
XCEngine::Rendering::Pipelines::GetManagedRenderPipelineAssetDescriptor();
XCEngine::Rendering::Pipelines::GetConfiguredManagedRenderPipelineAssetDescriptor();
EXPECT_EQ(descriptorAfterReplace.assemblyName, descriptorBeforeReplace.assemblyName);
EXPECT_EQ(descriptorAfterReplace.namespaceName, descriptorBeforeReplace.namespaceName);
EXPECT_EQ(descriptorAfterReplace.className, descriptorBeforeReplace.className);
@@ -765,7 +774,9 @@ TEST_F(
renderer.GetPipelineAsset());
ASSERT_NE(asset, nullptr);
EXPECT_EQ(asset->GetDescriptor().assemblyName, "XCEngine.ScriptCore");
EXPECT_EQ(asset->GetDescriptor().namespaceName, "XCEngine");
EXPECT_EQ(
asset->GetDescriptor().namespaceName,
"XCEngine.Rendering.FirstParty");
EXPECT_EQ(asset->GetDescriptor().className, "ForwardRenderPipelineAsset");
auto* host =
@@ -1015,7 +1026,7 @@ TEST_F(
renderer.GetPipelineAsset());
ASSERT_NE(pipelineAsset, nullptr);
EXPECT_EQ(pipelineAsset->GetDescriptor().assemblyName, "XCEngine.ScriptCore");
EXPECT_EQ(pipelineAsset->GetDescriptor().namespaceName, "XCEngine");
EXPECT_EQ(pipelineAsset->GetDescriptor().namespaceName, "XCEngine.Rendering.FirstParty");
EXPECT_EQ(
pipelineAsset->GetDescriptor().className,
"ForwardRenderPipelineAsset");
@@ -1091,7 +1102,7 @@ TEST_F(
renderer.GetPipelineAsset());
ASSERT_NE(pipelineAsset, nullptr);
EXPECT_EQ(pipelineAsset->GetDescriptor().assemblyName, "XCEngine.ScriptCore");
EXPECT_EQ(pipelineAsset->GetDescriptor().namespaceName, "XCEngine");
EXPECT_EQ(pipelineAsset->GetDescriptor().namespaceName, "XCEngine.Rendering.FirstParty");
EXPECT_EQ(
pipelineAsset->GetDescriptor().className,
"ForwardRenderPipelineAsset");
@@ -5381,3 +5392,4 @@ TEST_F(MonoScriptRuntimeTest, DisableEnablePreservesSingleInstanceAndStartOnlyRu
}
} // namespace