refactor: move scene view post passes into rendering

This commit is contained in:
2026-04-02 04:42:35 +08:00
parent c080890c9d
commit 0d3851204f
6 changed files with 383 additions and 198 deletions

View File

@@ -6,6 +6,7 @@ set(RENDERING_UNIT_TEST_SOURCES
test_render_pass.cpp
test_builtin_forward_pipeline.cpp
test_builtin_scene_view_post_pass_plan.cpp
test_builtin_scene_view_post_pass_sequence_builder.cpp
test_camera_scene_renderer.cpp
test_scene_render_request_planner.cpp
test_scene_render_request_utils.cpp

View File

@@ -0,0 +1,82 @@
#include <gtest/gtest.h>
#include <XCEngine/Rendering/Passes/BuiltinSceneViewPostPassSequenceBuilder.h>
namespace {
using XCEngine::Rendering::Passes::BuiltinSceneViewPostPassSequenceBuilder;
using XCEngine::Rendering::Passes::BuiltinSceneViewPostPassSequenceInput;
using XCEngine::Rendering::Passes::ObjectIdOutlineStyle;
using XCEngine::Rendering::RenderPassSequence;
TEST(BuiltinSceneViewPostPassSequenceBuilder_Test, ReturnsInvalidSequenceWhenGridDataIsUnavailable) {
BuiltinSceneViewPostPassSequenceBuilder builder;
RenderPassSequence sequence;
const auto result = builder.Build({}, sequence);
EXPECT_FALSE(result.valid);
EXPECT_FALSE(result.missingObjectIdTextureViewForSelection);
EXPECT_EQ(sequence.GetPassCount(), 0u);
}
TEST(BuiltinSceneViewPostPassSequenceBuilder_Test, BuildsGridOnlySequenceWhenNothingIsSelected) {
BuiltinSceneViewPostPassSequenceBuilder builder;
RenderPassSequence sequence;
BuiltinSceneViewPostPassSequenceInput input = {};
input.gridPassData.valid = true;
const auto result = builder.Build(input, sequence);
EXPECT_TRUE(result.valid);
EXPECT_FALSE(result.missingObjectIdTextureViewForSelection);
EXPECT_EQ(sequence.GetPassCount(), 3u);
}
TEST(BuiltinSceneViewPostPassSequenceBuilder_Test, BuildsSelectionOutlineSequenceWhenObjectIdTextureViewExists) {
BuiltinSceneViewPostPassSequenceBuilder builder;
RenderPassSequence sequence;
BuiltinSceneViewPostPassSequenceInput input = {};
input.gridPassData.valid = true;
input.objectIdTextureView = reinterpret_cast<XCEngine::RHI::RHIResourceView*>(1);
input.selectedObjectIds = { 7u, 11u };
const auto result = builder.Build(input, sequence);
EXPECT_TRUE(result.valid);
EXPECT_FALSE(result.missingObjectIdTextureViewForSelection);
EXPECT_EQ(sequence.GetPassCount(), 4u);
}
TEST(BuiltinSceneViewPostPassSequenceBuilder_Test, ReportsMissingObjectIdTextureViewAndFallsBackToGridOnlySequence) {
BuiltinSceneViewPostPassSequenceBuilder builder;
RenderPassSequence sequence;
BuiltinSceneViewPostPassSequenceInput input = {};
input.gridPassData.valid = true;
input.selectedObjectIds = { 42u };
const auto result = builder.Build(input, sequence);
EXPECT_TRUE(result.valid);
EXPECT_TRUE(result.missingObjectIdTextureViewForSelection);
EXPECT_EQ(sequence.GetPassCount(), 3u);
}
TEST(BuiltinSceneViewPostPassSequenceBuilder_Test, BuildsDebugMaskSequenceWhenRequested) {
BuiltinSceneViewPostPassSequenceBuilder builder;
RenderPassSequence sequence;
BuiltinSceneViewPostPassSequenceInput input = {};
input.gridPassData.valid = true;
input.objectIdTextureView = reinterpret_cast<XCEngine::RHI::RHIResourceView*>(1);
input.selectedObjectIds = { 5u };
input.outlineStyle = ObjectIdOutlineStyle{};
input.outlineStyle.debugSelectionMask = true;
const auto result = builder.Build(input, sequence);
EXPECT_TRUE(result.valid);
EXPECT_FALSE(result.missingObjectIdTextureViewForSelection);
EXPECT_EQ(sequence.GetPassCount(), 3u);
}
} // namespace