Formalize scene viewport overlay sprite resource lifecycle

This commit is contained in:
2026-04-04 17:10:15 +08:00
parent 98b307bc6d
commit c6b835a390
10 changed files with 434 additions and 184 deletions

View File

@@ -13,6 +13,7 @@ using XCEngine::Editor::ApplySceneViewportRenderRequestSetup;
using XCEngine::Editor::ApplySceneViewportRenderPlan;
using XCEngine::Editor::ApplyViewportFailureStatus;
using XCEngine::Editor::BuildGameViewportRenderFailurePolicy;
using XCEngine::Editor::BuildSceneViewportGridPassData;
using XCEngine::Editor::BuildSceneViewportRenderPlan;
using XCEngine::Editor::BuildSceneViewportRenderFailurePolicy;
using XCEngine::Editor::BuildSceneViewportSelectionOutlineStyle;
@@ -24,7 +25,9 @@ using XCEngine::Editor::SceneViewportOverlayFrameData;
using XCEngine::Editor::SceneViewportOverlayLinePrimitive;
using XCEngine::Editor::SceneViewportRenderFailure;
using XCEngine::Editor::SceneViewportOverlayData;
using XCEngine::Editor::SceneViewportGridPassData;
using XCEngine::Editor::SceneViewportRenderPlan;
using XCEngine::Editor::SceneViewportSelectionOutlineStyle;
using XCEngine::Editor::ViewportRenderTargets;
using XCEngine::RHI::Format;
using XCEngine::RHI::RHIResourceView;
@@ -163,7 +166,7 @@ TEST(ViewportRenderFlowUtilsTest, ApplyViewportFailureStatusRespectsSetIfEmptyBe
TEST(ViewportRenderFlowUtilsTest, BuildSceneViewportGridPassDataCopiesSceneCameraState) {
const SceneViewportOverlayData overlay = CreateValidOverlay();
const auto gridPassData = XCEngine::Editor::BuildSceneViewportGridPassData(overlay);
const auto gridPassData = BuildSceneViewportGridPassData(overlay);
EXPECT_TRUE(gridPassData.valid);
EXPECT_FLOAT_EQ(gridPassData.cameraPosition.x, overlay.cameraPosition.x);
@@ -265,7 +268,7 @@ TEST(ViewportRenderFlowUtilsTest, BuildSceneViewportRenderPlanCollectsPostSceneA
overlay,
{ 7u, 11u },
editorOverlayFrameData,
[&gridPassFactoryCallCount](const XCEngine::Rendering::Passes::InfiniteGridPassData& data) {
[&gridPassFactoryCallCount](const SceneViewportGridPassData& data) {
++gridPassFactoryCallCount;
EXPECT_TRUE(data.valid);
return std::make_unique<NoopRenderPass>();
@@ -273,7 +276,7 @@ TEST(ViewportRenderFlowUtilsTest, BuildSceneViewportRenderPlanCollectsPostSceneA
[&selectionOutlinePassFactoryCallCount](
RHIResourceView* objectIdTextureView,
const std::vector<uint64_t>& selectedObjectIds,
const XCEngine::Rendering::Passes::ObjectIdOutlineStyle& style) {
const SceneViewportSelectionOutlineStyle& style) {
++selectionOutlinePassFactoryCallCount;
EXPECT_NE(objectIdTextureView, nullptr);
EXPECT_EQ(selectedObjectIds.size(), 2u);
@@ -304,13 +307,13 @@ TEST(ViewportRenderFlowUtilsTest, BuildSceneViewportRenderPlanWarnsWhenSelection
overlay,
{ 42u },
{},
[](const XCEngine::Rendering::Passes::InfiniteGridPassData&) {
[](const SceneViewportGridPassData&) {
return std::make_unique<NoopRenderPass>();
},
[](
RHIResourceView*,
const std::vector<uint64_t>&,
const XCEngine::Rendering::Passes::ObjectIdOutlineStyle&) {
const SceneViewportSelectionOutlineStyle&) {
return std::make_unique<NoopRenderPass>();
},
[](const SceneViewportOverlayFrameData&) {