Advance editor runtime and scripting integration

This commit is contained in:
2026-04-29 16:55:44 +08:00
parent 631bf32db2
commit 2e50c90167
60 changed files with 4071 additions and 228 deletions

View File

@@ -1539,6 +1539,73 @@ TEST_F(
EXPECT_FLOAT_EQ(observedPostProcessScale.w, 1.0f);
}
TEST_F(
MonoScriptRuntimeTest,
ManagedRenderPipelineAssetBuildsSceneRequestsThroughManagedScenePlanningContext) {
Scene* runtimeScene =
CreateScene("ManagedScenePlanningRenderPipelineScene");
GameObject* rejectedCameraObject =
runtimeScene->CreateGameObject("RejectedCamera");
auto* rejectedCamera =
rejectedCameraObject->AddComponent<CameraComponent>();
ASSERT_NE(rejectedCamera, nullptr);
rejectedCamera->SetPrimary(true);
rejectedCamera->SetDepth(0.0f);
GameObject* selectedCameraObject =
runtimeScene->CreateGameObject("SelectedCamera");
auto* selectedCamera =
selectedCameraObject->AddComponent<CameraComponent>();
ASSERT_NE(selectedCamera, nullptr);
selectedCamera->SetPrimary(true);
selectedCamera->SetDepth(1.0f);
engine->OnRuntimeStart(runtimeScene);
TestRenderDevice device;
TestRenderCommandList commandList;
TestRenderCommandQueue commandQueue;
TestRenderResourceView colorView(
XCEngine::RHI::ResourceViewType::RenderTarget,
XCEngine::RHI::ResourceViewDimension::Texture2D,
XCEngine::RHI::Format::R8G8B8A8_UNorm);
TestRenderResourceView depthView(
XCEngine::RHI::ResourceViewType::DepthStencil,
XCEngine::RHI::ResourceViewDimension::Texture2D,
XCEngine::RHI::Format::D32_Float);
const XCEngine::Rendering::RenderContext context =
CreateRenderContext(
device,
commandList,
commandQueue);
XCEngine::Rendering::RenderSurface surface(64u, 64u);
surface.SetColorAttachment(&colorView);
surface.SetDepthAttachment(&depthView);
auto asset =
std::make_shared<
XCEngine::Rendering::Pipelines::ManagedScriptableRenderPipelineAsset>(
XCEngine::Rendering::Pipelines::ManagedRenderPipelineAssetDescriptor{
"GameScripts",
"Gameplay",
"ManagedScenePlanningRenderPipelineProbeAsset"});
XCEngine::Rendering::RenderPipelineHost host(asset);
const std::vector<XCEngine::Rendering::CameraFramePlan> plans =
host.BuildFramePlans(
*runtimeScene,
nullptr,
context,
surface);
ASSERT_EQ(plans.size(), 1u);
EXPECT_EQ(plans[0].request.camera, selectedCamera);
EXPECT_NE(plans[0].request.camera, rejectedCamera);
EXPECT_TRUE(runtime->GetLastError().empty()) << runtime->GetLastError();
}
TEST_F(
MonoScriptRuntimeTest,
DefaultSceneRendererUsesScriptCoreUniversalRendererFeatureForPlannedPostProcessRender) {
@@ -1739,6 +1806,10 @@ TEST_F(
bool hasPublicPipelineAssetConfigureCameraFramePlan = false;
bool hasPipelineAssetSetDirty = false;
bool hasPipelineAssetGetRuntimeResourceVersion = false;
bool hasScenePlanningContextType = false;
bool hasPublicScenePlanningContextUseDefaultRequests = false;
bool hasPublicScenePlanningContextAddCamera = false;
bool hasPipelineAssetBuildSceneRenderRequests = false;
bool hasPlanningContextType = false;
bool hasPublicPlanningContextFramePlanId = false;
bool hasRendererFeatureConfigureCameraFramePlan = false;
@@ -1915,6 +1986,22 @@ TEST_F(
selectionScript,
"HasPipelineAssetGetRuntimeResourceVersion",
hasPipelineAssetGetRuntimeResourceVersion));
EXPECT_TRUE(runtime->TryGetFieldValue(
selectionScript,
"HasScenePlanningContextType",
hasScenePlanningContextType));
EXPECT_TRUE(runtime->TryGetFieldValue(
selectionScript,
"HasPublicScenePlanningContextUseDefaultRequests",
hasPublicScenePlanningContextUseDefaultRequests));
EXPECT_TRUE(runtime->TryGetFieldValue(
selectionScript,
"HasPublicScenePlanningContextAddCamera",
hasPublicScenePlanningContextAddCamera));
EXPECT_TRUE(runtime->TryGetFieldValue(
selectionScript,
"HasPipelineAssetBuildSceneRenderRequests",
hasPipelineAssetBuildSceneRenderRequests));
EXPECT_TRUE(runtime->TryGetFieldValue(
selectionScript,
"HasPlanningContextType",
@@ -2106,6 +2193,10 @@ TEST_F(
EXPECT_TRUE(hasPublicPipelineAssetConfigureCameraFramePlan);
EXPECT_TRUE(hasPipelineAssetSetDirty);
EXPECT_TRUE(hasPipelineAssetGetRuntimeResourceVersion);
EXPECT_TRUE(hasScenePlanningContextType);
EXPECT_TRUE(hasPublicScenePlanningContextUseDefaultRequests);
EXPECT_TRUE(hasPublicScenePlanningContextAddCamera);
EXPECT_TRUE(hasPipelineAssetBuildSceneRenderRequests);
EXPECT_TRUE(hasPlanningContextType);
EXPECT_TRUE(hasPublicPlanningContextFramePlanId);
EXPECT_TRUE(hasRendererFeatureConfigureCameraFramePlan);