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

@@ -2,6 +2,18 @@ cmake_minimum_required(VERSION 3.15)
project(XCEngine_ScriptingTests)
function(xcengine_attach_recursive_build_target target dependency_target)
add_custom_command(TARGET ${target} PRE_BUILD
COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR}
--config $<CONFIG>
--target ${dependency_target}
--
/m:1
/p:BuildProjectReferences=false
VERBATIM
COMMENT "Building ${dependency_target} before ${target}")
endfunction()
set(SCRIPTING_TEST_SOURCES
test_script_field_storage.cpp
test_script_component.cpp
@@ -40,6 +52,7 @@ target_include_directories(scripting_tests PRIVATE
if(TARGET xcengine_managed_assemblies)
add_dependencies(scripting_tests xcengine_managed_assemblies)
xcengine_attach_recursive_build_target(scripting_tests xcengine_managed_assemblies)
file(TO_CMAKE_PATH "${XCENGINE_MANAGED_OUTPUT_DIR}" XCENGINE_MANAGED_OUTPUT_DIR_CMAKE)
file(TO_CMAKE_PATH "${XCENGINE_SCRIPT_CORE_DLL}" XCENGINE_SCRIPT_CORE_DLL_CMAKE)
@@ -54,6 +67,9 @@ endif()
if(TARGET xcengine_test_project_managed_assemblies)
add_dependencies(scripting_tests xcengine_test_project_managed_assemblies)
xcengine_attach_recursive_build_target(
scripting_tests
xcengine_test_project_managed_assemblies)
file(
TO_CMAKE_PATH

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;