Add managed render pipeline selection bridge

This commit is contained in:
2026-04-15 01:57:14 +08:00
parent ec6965b0dd
commit aa727202af
18 changed files with 566 additions and 10 deletions

View File

@@ -11,6 +11,7 @@
#include <XCEngine/Core/Math/Vector4.h>
#include <XCEngine/Input/InputManager.h>
#include <XCEngine/Input/InputTypes.h>
#include <XCEngine/Rendering/Pipelines/ManagedScriptableRenderPipelineAsset.h>
#include <XCEngine/Scene/Scene.h>
#include <XCEngine/Scripting/Mono/MonoScriptRuntime.h>
#include <XCEngine/Scripting/ScriptComponent.h>
@@ -91,6 +92,7 @@ protected:
engine->OnRuntimeStop();
engine->SetRuntimeFixedDeltaTime(ScriptEngine::DefaultFixedDeltaTime);
XCEngine::Input::InputManager::Get().Shutdown();
XCEngine::Rendering::Pipelines::ClearManagedRenderPipelineAssetDescriptor();
runtime = std::make_unique<MonoScriptRuntime>(CreateMonoSettings());
ASSERT_TRUE(runtime->Initialize()) << runtime->GetLastError();
@@ -102,6 +104,7 @@ protected:
engine->OnRuntimeStop();
engine->SetRuntime(nullptr);
XCEngine::Input::InputManager::Get().Shutdown();
XCEngine::Rendering::Pipelines::ClearManagedRenderPipelineAssetDescriptor();
runtime.reset();
scene.reset();
}
@@ -262,6 +265,38 @@ TEST_F(MonoScriptRuntimeTest, ClassFieldMetadataListsConcreteComponentReferenceF
EXPECT_EQ(fields, expected);
}
TEST_F(MonoScriptRuntimeTest, ManagedGraphicsSettingsRoundTripsRenderPipelineAssetSelection) {
Scene* runtimeScene = CreateScene("ManagedRenderPipelineSelectionScene");
GameObject* scriptObject = runtimeScene->CreateGameObject("RenderPipelineProbe");
ScriptComponent* script =
AddScript(scriptObject, "Gameplay", "RenderPipelineApiProbe");
ASSERT_NE(script, nullptr);
engine->OnRuntimeStart(runtimeScene);
engine->OnUpdate(0.016f);
const XCEngine::Rendering::Pipelines::ManagedRenderPipelineAssetDescriptor descriptor =
XCEngine::Rendering::Pipelines::GetManagedRenderPipelineAssetDescriptor();
EXPECT_EQ(descriptor.assemblyName, "GameScripts");
EXPECT_EQ(descriptor.namespaceName, "Gameplay");
EXPECT_EQ(descriptor.className, "RenderPipelineApiProbeAsset");
bool selectionRoundTripSucceeded = false;
std::string selectedPipelineTypeName;
EXPECT_TRUE(runtime->TryGetFieldValue(
script,
"SelectionRoundTripSucceeded",
selectionRoundTripSucceeded));
EXPECT_TRUE(selectionRoundTripSucceeded);
EXPECT_TRUE(runtime->TryGetFieldValue(
script,
"SelectedPipelineTypeName",
selectedPipelineTypeName));
EXPECT_EQ(
selectedPipelineTypeName,
"Gameplay.RenderPipelineApiProbeAsset");
}
TEST_F(MonoScriptRuntimeTest, ClassFieldDefaultValueQueryReturnsNullComponentReferences) {
std::vector<ScriptFieldDefaultValue> fields;