Move scene viewport post effects into editor passes
This commit is contained in:
@@ -16,6 +16,7 @@ using XCEngine::Editor::BuildGameViewportRenderFailurePolicy;
|
||||
using XCEngine::Editor::BuildSceneViewportBuiltinPostProcess;
|
||||
using XCEngine::Editor::BuildSceneViewportRenderPlan;
|
||||
using XCEngine::Editor::BuildSceneViewportRenderFailurePolicy;
|
||||
using XCEngine::Editor::BuildSceneViewportSelectionOutlineStyle;
|
||||
using XCEngine::Editor::BuildViewportRenderTargetUnavailablePolicy;
|
||||
using XCEngine::Editor::GameViewportRenderFailure;
|
||||
using XCEngine::Editor::MarkGameViewportRenderSuccess;
|
||||
@@ -314,7 +315,7 @@ TEST(ViewportRenderFlowUtilsTest, ApplySceneRenderRequestSetupPreservesBuiltinGr
|
||||
EXPECT_TRUE(request.objectId.IsRequested());
|
||||
}
|
||||
|
||||
TEST(ViewportRenderFlowUtilsTest, BuildSceneViewportRenderPlanCollectsBuiltinAndOverlayPasses) {
|
||||
TEST(ViewportRenderFlowUtilsTest, BuildSceneViewportRenderPlanCollectsPostSceneAndOverlayPasses) {
|
||||
DummyResourceView objectIdShaderView(ResourceViewType::ShaderResource);
|
||||
|
||||
ViewportRenderTargets targets = {};
|
||||
@@ -334,12 +335,29 @@ TEST(ViewportRenderFlowUtilsTest, BuildSceneViewportRenderPlanCollectsBuiltinAnd
|
||||
|
||||
size_t factoryCallCount = 0u;
|
||||
size_t combinedWorldLineCount = 0u;
|
||||
size_t gridPassFactoryCallCount = 0u;
|
||||
size_t selectionOutlinePassFactoryCallCount = 0u;
|
||||
const auto result = BuildSceneViewportRenderPlan(
|
||||
targets,
|
||||
overlay,
|
||||
{ 7u, 11u },
|
||||
editorOverlayFrameData,
|
||||
transientOverlayFrameData,
|
||||
[&gridPassFactoryCallCount](const XCEngine::Rendering::Passes::InfiniteGridPassData& data) {
|
||||
++gridPassFactoryCallCount;
|
||||
EXPECT_TRUE(data.valid);
|
||||
return std::make_unique<NoopRenderPass>();
|
||||
},
|
||||
[&selectionOutlinePassFactoryCallCount](
|
||||
RHIResourceView* objectIdTextureView,
|
||||
const std::vector<uint64_t>& selectedObjectIds,
|
||||
const XCEngine::Rendering::Passes::ObjectIdOutlineStyle& style) {
|
||||
++selectionOutlinePassFactoryCallCount;
|
||||
EXPECT_NE(objectIdTextureView, nullptr);
|
||||
EXPECT_EQ(selectedObjectIds.size(), 2u);
|
||||
EXPECT_FLOAT_EQ(style.outlineWidthPixels, 2.0f);
|
||||
return std::make_unique<NoopRenderPass>();
|
||||
},
|
||||
[&factoryCallCount, &combinedWorldLineCount](const SceneViewportOverlayFrameData& frameData) {
|
||||
++factoryCallCount;
|
||||
combinedWorldLineCount = frameData.worldLines.size();
|
||||
@@ -347,13 +365,43 @@ TEST(ViewportRenderFlowUtilsTest, BuildSceneViewportRenderPlanCollectsBuiltinAnd
|
||||
},
|
||||
false);
|
||||
|
||||
EXPECT_TRUE(result.plan.builtinPostProcess.IsRequested());
|
||||
EXPECT_FALSE(result.plan.builtinPostProcess.IsRequested());
|
||||
EXPECT_EQ(result.plan.postScenePasses.GetPassCount(), 2u);
|
||||
EXPECT_EQ(result.plan.overlayPasses.GetPassCount(), 1u);
|
||||
EXPECT_EQ(factoryCallCount, 1u);
|
||||
EXPECT_EQ(gridPassFactoryCallCount, 1u);
|
||||
EXPECT_EQ(selectionOutlinePassFactoryCallCount, 1u);
|
||||
EXPECT_EQ(combinedWorldLineCount, 2u);
|
||||
EXPECT_EQ(result.warningStatusText, nullptr);
|
||||
}
|
||||
|
||||
TEST(ViewportRenderFlowUtilsTest, BuildSceneViewportRenderPlanWarnsWhenSelectionOutlineCannotAccessObjectIdTexture) {
|
||||
const SceneViewportOverlayData overlay = CreateValidOverlay();
|
||||
|
||||
const auto result = BuildSceneViewportRenderPlan(
|
||||
{},
|
||||
overlay,
|
||||
{ 42u },
|
||||
{},
|
||||
{},
|
||||
[](const XCEngine::Rendering::Passes::InfiniteGridPassData&) {
|
||||
return std::make_unique<NoopRenderPass>();
|
||||
},
|
||||
[](
|
||||
RHIResourceView*,
|
||||
const std::vector<uint64_t>&,
|
||||
const XCEngine::Rendering::Passes::ObjectIdOutlineStyle&) {
|
||||
return std::make_unique<NoopRenderPass>();
|
||||
},
|
||||
[](const SceneViewportOverlayFrameData&) {
|
||||
return std::make_unique<NoopRenderPass>();
|
||||
},
|
||||
false);
|
||||
|
||||
EXPECT_EQ(result.plan.postScenePasses.GetPassCount(), 1u);
|
||||
EXPECT_STREQ(result.warningStatusText, "Scene object id shader view is unavailable");
|
||||
}
|
||||
|
||||
TEST(ViewportRenderFlowUtilsTest, ApplySceneViewportRenderPlanAttachesPlannedPassesAndClearState) {
|
||||
DummyResourceView depthView(ResourceViewType::DepthStencil, Format::D24_UNorm_S8_UInt);
|
||||
DummyResourceView objectIdView(ResourceViewType::RenderTarget);
|
||||
|
||||
Reference in New Issue
Block a user