feat(new_editor): wire project, inspector, and viewport runtime

This commit is contained in:
2026-04-19 00:03:25 +08:00
parent 8257403036
commit a57b322bc7
168 changed files with 14829 additions and 2507 deletions

View File

@@ -206,23 +206,23 @@ TEST(ViewportRenderFlowUtilsTest, ApplySceneRenderRequestSetupAttachesOptionalPa
RenderPassSequence postPasses;
postPasses.AddPass(std::make_unique<NoopRenderPass>());
XCEngine::Rendering::CameraRenderRequest request = {};
request.surface = RenderSurface(800, 600);
request.surface.SetRenderArea(XCEngine::Math::RectInt(64, 32, 320, 240));
XCEngine::Rendering::CameraFramePlan plan = {};
plan.request.surface = RenderSurface(800, 600);
plan.request.surface.SetRenderArea(XCEngine::Math::RectInt(64, 32, 320, 240));
ApplySceneViewportRenderRequestSetup(
targets,
&postPasses,
request);
plan);
EXPECT_EQ(request.postScenePasses, &postPasses);
EXPECT_TRUE(request.objectId.IsRequested());
ASSERT_EQ(request.objectId.surface.GetColorAttachments().size(), 1u);
EXPECT_EQ(request.objectId.surface.GetColorAttachments()[0], &objectIdView);
EXPECT_EQ(request.objectId.surface.GetDepthAttachment(), &objectIdDepthView);
EXPECT_EQ(plan.postScenePasses, &postPasses);
EXPECT_TRUE(plan.request.objectId.IsRequested());
ASSERT_EQ(plan.request.objectId.surface.GetColorAttachments().size(), 1u);
EXPECT_EQ(plan.request.objectId.surface.GetColorAttachments()[0], &objectIdView);
EXPECT_EQ(plan.request.objectId.surface.GetDepthAttachment(), &objectIdDepthView);
const auto requestArea = request.surface.GetRenderArea();
const auto objectIdArea = request.objectId.surface.GetRenderArea();
const auto requestArea = plan.request.surface.GetRenderArea();
const auto objectIdArea = plan.request.objectId.surface.GetRenderArea();
EXPECT_EQ(objectIdArea.x, requestArea.x);
EXPECT_EQ(objectIdArea.y, requestArea.y);
EXPECT_EQ(objectIdArea.width, requestArea.width);
@@ -236,16 +236,16 @@ TEST(ViewportRenderFlowUtilsTest, ApplySceneRenderRequestSetupSkipsUnavailableOp
RenderPassSequence postPasses;
XCEngine::Rendering::CameraRenderRequest request = {};
request.postScenePasses = reinterpret_cast<RenderPassSequence*>(static_cast<uintptr_t>(0x1));
request.objectId.surface = RenderSurface(1, 1);
request.objectId.surface.SetColorAttachment(
XCEngine::Rendering::CameraFramePlan plan = {};
plan.postScenePasses = reinterpret_cast<RenderPassSequence*>(static_cast<uintptr_t>(0x1));
plan.request.objectId.surface = RenderSurface(1, 1);
plan.request.objectId.surface.SetColorAttachment(
reinterpret_cast<RHIResourceView*>(static_cast<uintptr_t>(0x2)));
ApplySceneViewportRenderRequestSetup(targets, &postPasses, request);
ApplySceneViewportRenderRequestSetup(targets, &postPasses, plan);
EXPECT_EQ(request.postScenePasses, nullptr);
EXPECT_FALSE(request.objectId.IsRequested());
EXPECT_EQ(plan.postScenePasses, nullptr);
EXPECT_FALSE(plan.request.objectId.IsRequested());
}
TEST(ViewportRenderFlowUtilsTest, BuildSceneViewportRenderPlanCollectsPostSceneAndOverlayPasses) {
@@ -397,19 +397,19 @@ TEST(ViewportRenderFlowUtilsTest, ApplySceneViewportRenderPlanAttachesPlannedPas
plan.overlayPasses.AddPass(std::make_unique<NoopRenderPass>());
plan.clearColorOverride = XCEngine::Math::Color(0.1f, 0.2f, 0.3f, 1.0f);
XCEngine::Rendering::CameraRenderRequest request = {};
request.surface = RenderSurface(800, 600);
request.surface.SetRenderArea(XCEngine::Math::RectInt(10, 20, 300, 200));
XCEngine::Rendering::CameraFramePlan framePlan = {};
framePlan.request.surface = RenderSurface(800, 600);
framePlan.request.surface.SetRenderArea(XCEngine::Math::RectInt(10, 20, 300, 200));
ApplySceneViewportRenderPlan(targets, plan, request);
ApplySceneViewportRenderPlan(targets, plan, framePlan);
EXPECT_EQ(request.postScenePasses, &plan.postScenePasses);
EXPECT_EQ(request.overlayPasses, &plan.overlayPasses);
EXPECT_TRUE(request.objectId.IsRequested());
EXPECT_TRUE(request.hasClearColorOverride);
EXPECT_FLOAT_EQ(request.clearColorOverride.r, 0.1f);
EXPECT_FLOAT_EQ(request.clearColorOverride.g, 0.2f);
EXPECT_FLOAT_EQ(request.clearColorOverride.b, 0.3f);
EXPECT_EQ(framePlan.postScenePasses, &plan.postScenePasses);
EXPECT_EQ(framePlan.overlayPasses, &plan.overlayPasses);
EXPECT_TRUE(framePlan.request.objectId.IsRequested());
EXPECT_TRUE(framePlan.request.hasClearColorOverride);
EXPECT_FLOAT_EQ(framePlan.request.clearColorOverride.r, 0.1f);
EXPECT_FLOAT_EQ(framePlan.request.clearColorOverride.g, 0.2f);
EXPECT_FLOAT_EQ(framePlan.request.clearColorOverride.b, 0.3f);
}
TEST(ViewportRenderFlowUtilsTest, MarkSceneRenderSuccessMovesTargetsToShaderResourceState) {
@@ -429,11 +429,11 @@ TEST(ViewportRenderFlowUtilsTest, MarkSceneRenderSuccessMovesTargetsToShaderReso
targets.objectIdState = ResourceStates::Common;
targets.selectionMaskState = ResourceStates::Common;
XCEngine::Rendering::CameraRenderRequest request = {};
request.surface = RenderSurface(640, 360);
ApplySceneViewportRenderRequestSetup(targets, nullptr, request);
XCEngine::Rendering::CameraFramePlan framePlan = {};
framePlan.request.surface = RenderSurface(640, 360);
ApplySceneViewportRenderRequestSetup(targets, nullptr, framePlan);
MarkSceneViewportRenderSuccess(targets, request);
MarkSceneViewportRenderSuccess(targets, framePlan);
EXPECT_EQ(targets.colorState, ResourceStates::PixelShaderResource);
EXPECT_EQ(targets.objectIdState, ResourceStates::PixelShaderResource);
EXPECT_EQ(targets.selectionMaskState, ResourceStates::PixelShaderResource);
@@ -443,9 +443,9 @@ TEST(ViewportRenderFlowUtilsTest, MarkSceneRenderSuccessMovesTargetsToShaderReso
noObjectIdTargets.colorState = ResourceStates::Common;
noObjectIdTargets.objectIdState = ResourceStates::Common;
noObjectIdTargets.selectionMaskState = ResourceStates::Common;
XCEngine::Rendering::CameraRenderRequest noObjectIdRequest = {};
XCEngine::Rendering::CameraFramePlan noObjectIdPlan = {};
MarkSceneViewportRenderSuccess(noObjectIdTargets, noObjectIdRequest);
MarkSceneViewportRenderSuccess(noObjectIdTargets, noObjectIdPlan);
EXPECT_EQ(noObjectIdTargets.colorState, ResourceStates::PixelShaderResource);
EXPECT_EQ(noObjectIdTargets.objectIdState, ResourceStates::PixelShaderResource);
EXPECT_EQ(noObjectIdTargets.selectionMaskState, ResourceStates::PixelShaderResource);