refactor: move scene view post-pass planning into renderer
This commit is contained in:
@@ -1,65 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <cstdint>
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
namespace XCEngine {
|
|
||||||
namespace Editor {
|
|
||||||
|
|
||||||
enum class SceneViewportPostPassStep : uint8_t {
|
|
||||||
ColorToRenderTarget,
|
|
||||||
InfiniteGrid,
|
|
||||||
SelectionOutline,
|
|
||||||
ColorToShaderResource,
|
|
||||||
SelectionMaskDebug
|
|
||||||
};
|
|
||||||
|
|
||||||
struct SceneViewportPostPassPlanInput {
|
|
||||||
bool overlayValid = false;
|
|
||||||
bool hasSelection = false;
|
|
||||||
bool debugSelectionMask = false;
|
|
||||||
bool hasObjectIdShaderView = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct SceneViewportPostPassPlan {
|
|
||||||
bool valid = false;
|
|
||||||
std::vector<SceneViewportPostPassStep> steps;
|
|
||||||
};
|
|
||||||
|
|
||||||
inline SceneViewportPostPassPlan BuildSceneViewportPostPassPlan(
|
|
||||||
const SceneViewportPostPassPlanInput& input) {
|
|
||||||
SceneViewportPostPassPlan plan = {};
|
|
||||||
if (!input.overlayValid) {
|
|
||||||
return plan;
|
|
||||||
}
|
|
||||||
|
|
||||||
plan.valid = true;
|
|
||||||
|
|
||||||
if (input.debugSelectionMask) {
|
|
||||||
plan.steps.push_back(SceneViewportPostPassStep::ColorToRenderTarget);
|
|
||||||
if (input.hasSelection && input.hasObjectIdShaderView) {
|
|
||||||
plan.steps.push_back(SceneViewportPostPassStep::SelectionMaskDebug);
|
|
||||||
}
|
|
||||||
plan.steps.push_back(SceneViewportPostPassStep::ColorToShaderResource);
|
|
||||||
return plan;
|
|
||||||
}
|
|
||||||
|
|
||||||
plan.steps.push_back(SceneViewportPostPassStep::ColorToRenderTarget);
|
|
||||||
plan.steps.push_back(SceneViewportPostPassStep::InfiniteGrid);
|
|
||||||
|
|
||||||
if (input.hasSelection && input.hasObjectIdShaderView) {
|
|
||||||
plan.steps = {
|
|
||||||
SceneViewportPostPassStep::ColorToRenderTarget,
|
|
||||||
SceneViewportPostPassStep::InfiniteGrid,
|
|
||||||
SceneViewportPostPassStep::SelectionOutline,
|
|
||||||
SceneViewportPostPassStep::ColorToShaderResource
|
|
||||||
};
|
|
||||||
return plan;
|
|
||||||
}
|
|
||||||
|
|
||||||
plan.steps.push_back(SceneViewportPostPassStep::ColorToShaderResource);
|
|
||||||
return plan;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace Editor
|
|
||||||
} // namespace XCEngine
|
|
||||||
@@ -6,7 +6,6 @@
|
|||||||
#include "IViewportHostService.h"
|
#include "IViewportHostService.h"
|
||||||
#include "SceneViewportPicker.h"
|
#include "SceneViewportPicker.h"
|
||||||
#include "SceneViewportCameraController.h"
|
#include "SceneViewportCameraController.h"
|
||||||
#include "SceneViewportPostPassPlan.h"
|
|
||||||
#include "UI/ImGuiBackendBridge.h"
|
#include "UI/ImGuiBackendBridge.h"
|
||||||
|
|
||||||
#include <XCEngine/Components/CameraComponent.h>
|
#include <XCEngine/Components/CameraComponent.h>
|
||||||
@@ -18,6 +17,7 @@
|
|||||||
#include <XCEngine/RHI/RHITexture.h>
|
#include <XCEngine/RHI/RHITexture.h>
|
||||||
#include <XCEngine/Rendering/ObjectIdEncoding.h>
|
#include <XCEngine/Rendering/ObjectIdEncoding.h>
|
||||||
#include <XCEngine/Rendering/Passes/BuiltinInfiniteGridPass.h>
|
#include <XCEngine/Rendering/Passes/BuiltinInfiniteGridPass.h>
|
||||||
|
#include <XCEngine/Rendering/Passes/BuiltinSceneViewPostPassPlan.h>
|
||||||
#include <XCEngine/Rendering/Passes/BuiltinObjectIdOutlinePass.h>
|
#include <XCEngine/Rendering/Passes/BuiltinObjectIdOutlinePass.h>
|
||||||
#include <XCEngine/Rendering/RenderContext.h>
|
#include <XCEngine/Rendering/RenderContext.h>
|
||||||
#include <XCEngine/Rendering/RenderSurface.h>
|
#include <XCEngine/Rendering/RenderSurface.h>
|
||||||
@@ -688,25 +688,25 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void AddSceneViewPostPassStep(
|
void AddSceneViewPostPassStep(
|
||||||
SceneViewportPostPassStep step,
|
Rendering::Passes::BuiltinSceneViewPostPassStep step,
|
||||||
ViewportEntry& entry,
|
ViewportEntry& entry,
|
||||||
const SceneViewportOverlayData& overlay,
|
const SceneViewportOverlayData& overlay,
|
||||||
const std::vector<uint64_t>& selectedObjectIds,
|
const std::vector<uint64_t>& selectedObjectIds,
|
||||||
Rendering::RenderPassSequence& outPostPasses) {
|
Rendering::RenderPassSequence& outPostPasses) {
|
||||||
switch (step) {
|
switch (step) {
|
||||||
case SceneViewportPostPassStep::ColorToRenderTarget:
|
case Rendering::Passes::BuiltinSceneViewPostPassStep::ColorToRenderTarget:
|
||||||
AddSceneColorToRenderTargetPass(entry, outPostPasses);
|
AddSceneColorToRenderTargetPass(entry, outPostPasses);
|
||||||
break;
|
break;
|
||||||
case SceneViewportPostPassStep::InfiniteGrid:
|
case Rendering::Passes::BuiltinSceneViewPostPassStep::InfiniteGrid:
|
||||||
AddSceneInfiniteGridPass(entry, overlay, outPostPasses);
|
AddSceneInfiniteGridPass(entry, overlay, outPostPasses);
|
||||||
break;
|
break;
|
||||||
case SceneViewportPostPassStep::SelectionOutline:
|
case Rendering::Passes::BuiltinSceneViewPostPassStep::SelectionOutline:
|
||||||
AddSceneSelectionOutlinePass(entry, selectedObjectIds, outPostPasses);
|
AddSceneSelectionOutlinePass(entry, selectedObjectIds, outPostPasses);
|
||||||
break;
|
break;
|
||||||
case SceneViewportPostPassStep::ColorToShaderResource:
|
case Rendering::Passes::BuiltinSceneViewPostPassStep::ColorToShaderResource:
|
||||||
AddSceneColorToShaderResourcePass(entry, outPostPasses);
|
AddSceneColorToShaderResourcePass(entry, outPostPasses);
|
||||||
break;
|
break;
|
||||||
case SceneViewportPostPassStep::SelectionMaskDebug:
|
case Rendering::Passes::BuiltinSceneViewPostPassStep::SelectionMaskDebug:
|
||||||
AddSceneSelectionMaskDebugPass(
|
AddSceneSelectionMaskDebugPass(
|
||||||
entry,
|
entry,
|
||||||
selectedObjectIds,
|
selectedObjectIds,
|
||||||
@@ -731,7 +731,8 @@ private:
|
|||||||
SetViewportStatusIfEmpty(entry.statusText, "Scene object id shader view is unavailable");
|
SetViewportStatusIfEmpty(entry.statusText, "Scene object id shader view is unavailable");
|
||||||
}
|
}
|
||||||
|
|
||||||
const SceneViewportPostPassPlan plan = BuildSceneViewportPostPassPlan({
|
const Rendering::Passes::BuiltinSceneViewPostPassPlan plan =
|
||||||
|
Rendering::Passes::BuildBuiltinSceneViewPostPassPlan({
|
||||||
overlay.valid,
|
overlay.valid,
|
||||||
hasSelection,
|
hasSelection,
|
||||||
kDebugSceneSelectionMask,
|
kDebugSceneSelectionMask,
|
||||||
@@ -741,7 +742,7 @@ private:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const SceneViewportPostPassStep step : plan.steps) {
|
for (const Rendering::Passes::BuiltinSceneViewPostPassStep step : plan.steps) {
|
||||||
AddSceneViewPostPassStep(
|
AddSceneViewPostPassStep(
|
||||||
step,
|
step,
|
||||||
entry,
|
entry,
|
||||||
|
|||||||
@@ -346,6 +346,7 @@ add_library(XCEngine STATIC
|
|||||||
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/SceneRenderer.h
|
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/SceneRenderer.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/Passes/BuiltinObjectIdPass.h
|
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/Passes/BuiltinObjectIdPass.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/Passes/BuiltinInfiniteGridPass.h
|
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/Passes/BuiltinInfiniteGridPass.h
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/Passes/BuiltinSceneViewPostPassPlan.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/Passes/BuiltinObjectIdOutlinePass.h
|
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/Passes/BuiltinObjectIdOutlinePass.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/Pipelines/BuiltinForwardPipeline.h
|
${CMAKE_CURRENT_SOURCE_DIR}/include/XCEngine/Rendering/Pipelines/BuiltinForwardPipeline.h
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src/Rendering/CameraRenderer.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/src/Rendering/CameraRenderer.cpp
|
||||||
|
|||||||
@@ -0,0 +1,67 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
namespace XCEngine {
|
||||||
|
namespace Rendering {
|
||||||
|
namespace Passes {
|
||||||
|
|
||||||
|
enum class BuiltinSceneViewPostPassStep : uint8_t {
|
||||||
|
ColorToRenderTarget,
|
||||||
|
InfiniteGrid,
|
||||||
|
SelectionOutline,
|
||||||
|
ColorToShaderResource,
|
||||||
|
SelectionMaskDebug
|
||||||
|
};
|
||||||
|
|
||||||
|
struct BuiltinSceneViewPostPassPlanInput {
|
||||||
|
bool overlayValid = false;
|
||||||
|
bool hasSelection = false;
|
||||||
|
bool debugSelectionMask = false;
|
||||||
|
bool hasObjectIdShaderView = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct BuiltinSceneViewPostPassPlan {
|
||||||
|
bool valid = false;
|
||||||
|
std::vector<BuiltinSceneViewPostPassStep> steps;
|
||||||
|
};
|
||||||
|
|
||||||
|
inline BuiltinSceneViewPostPassPlan BuildBuiltinSceneViewPostPassPlan(
|
||||||
|
const BuiltinSceneViewPostPassPlanInput& input) {
|
||||||
|
BuiltinSceneViewPostPassPlan plan = {};
|
||||||
|
if (!input.overlayValid) {
|
||||||
|
return plan;
|
||||||
|
}
|
||||||
|
|
||||||
|
plan.valid = true;
|
||||||
|
|
||||||
|
if (input.debugSelectionMask) {
|
||||||
|
plan.steps.push_back(BuiltinSceneViewPostPassStep::ColorToRenderTarget);
|
||||||
|
if (input.hasSelection && input.hasObjectIdShaderView) {
|
||||||
|
plan.steps.push_back(BuiltinSceneViewPostPassStep::SelectionMaskDebug);
|
||||||
|
}
|
||||||
|
plan.steps.push_back(BuiltinSceneViewPostPassStep::ColorToShaderResource);
|
||||||
|
return plan;
|
||||||
|
}
|
||||||
|
|
||||||
|
plan.steps.push_back(BuiltinSceneViewPostPassStep::ColorToRenderTarget);
|
||||||
|
plan.steps.push_back(BuiltinSceneViewPostPassStep::InfiniteGrid);
|
||||||
|
|
||||||
|
if (input.hasSelection && input.hasObjectIdShaderView) {
|
||||||
|
plan.steps = {
|
||||||
|
BuiltinSceneViewPostPassStep::ColorToRenderTarget,
|
||||||
|
BuiltinSceneViewPostPassStep::InfiniteGrid,
|
||||||
|
BuiltinSceneViewPostPassStep::SelectionOutline,
|
||||||
|
BuiltinSceneViewPostPassStep::ColorToShaderResource
|
||||||
|
};
|
||||||
|
return plan;
|
||||||
|
}
|
||||||
|
|
||||||
|
plan.steps.push_back(BuiltinSceneViewPostPassStep::ColorToShaderResource);
|
||||||
|
return plan;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace Passes
|
||||||
|
} // namespace Rendering
|
||||||
|
} // namespace XCEngine
|
||||||
@@ -5,6 +5,7 @@ project(XCEngine_RenderingUnitTests)
|
|||||||
set(RENDERING_UNIT_TEST_SOURCES
|
set(RENDERING_UNIT_TEST_SOURCES
|
||||||
test_render_pass.cpp
|
test_render_pass.cpp
|
||||||
test_builtin_forward_pipeline.cpp
|
test_builtin_forward_pipeline.cpp
|
||||||
|
test_builtin_scene_view_post_pass_plan.cpp
|
||||||
test_camera_scene_renderer.cpp
|
test_camera_scene_renderer.cpp
|
||||||
test_render_scene_extractor.cpp
|
test_render_scene_extractor.cpp
|
||||||
)
|
)
|
||||||
|
|||||||
108
tests/Rendering/unit/test_builtin_scene_view_post_pass_plan.cpp
Normal file
108
tests/Rendering/unit/test_builtin_scene_view_post_pass_plan.cpp
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
|
#include <XCEngine/Rendering/Passes/BuiltinSceneViewPostPassPlan.h>
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
using XCEngine::Rendering::Passes::BuildBuiltinSceneViewPostPassPlan;
|
||||||
|
using XCEngine::Rendering::Passes::BuiltinSceneViewPostPassPlanInput;
|
||||||
|
using XCEngine::Rendering::Passes::BuiltinSceneViewPostPassStep;
|
||||||
|
|
||||||
|
TEST(BuiltinSceneViewPostPassPlan_Test, ReturnsInvalidPlanWhenOverlayIsUnavailable) {
|
||||||
|
const auto plan = BuildBuiltinSceneViewPostPassPlan({});
|
||||||
|
|
||||||
|
EXPECT_FALSE(plan.valid);
|
||||||
|
EXPECT_TRUE(plan.steps.empty());
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(BuiltinSceneViewPostPassPlan_Test, BuildsGridOnlyPlanWhenNothingIsSelected) {
|
||||||
|
BuiltinSceneViewPostPassPlanInput input = {};
|
||||||
|
input.overlayValid = true;
|
||||||
|
|
||||||
|
const auto plan = BuildBuiltinSceneViewPostPassPlan(input);
|
||||||
|
|
||||||
|
ASSERT_TRUE(plan.valid);
|
||||||
|
EXPECT_EQ(
|
||||||
|
plan.steps,
|
||||||
|
(std::vector<BuiltinSceneViewPostPassStep>{
|
||||||
|
BuiltinSceneViewPostPassStep::ColorToRenderTarget,
|
||||||
|
BuiltinSceneViewPostPassStep::InfiniteGrid,
|
||||||
|
BuiltinSceneViewPostPassStep::ColorToShaderResource
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(BuiltinSceneViewPostPassPlan_Test, BuildsSelectionOutlinePlanWhenObjectIdShaderViewExists) {
|
||||||
|
BuiltinSceneViewPostPassPlanInput input = {};
|
||||||
|
input.overlayValid = true;
|
||||||
|
input.hasSelection = true;
|
||||||
|
input.hasObjectIdShaderView = true;
|
||||||
|
|
||||||
|
const auto plan = BuildBuiltinSceneViewPostPassPlan(input);
|
||||||
|
|
||||||
|
ASSERT_TRUE(plan.valid);
|
||||||
|
EXPECT_EQ(
|
||||||
|
plan.steps,
|
||||||
|
(std::vector<BuiltinSceneViewPostPassStep>{
|
||||||
|
BuiltinSceneViewPostPassStep::ColorToRenderTarget,
|
||||||
|
BuiltinSceneViewPostPassStep::InfiniteGrid,
|
||||||
|
BuiltinSceneViewPostPassStep::SelectionOutline,
|
||||||
|
BuiltinSceneViewPostPassStep::ColorToShaderResource
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(BuiltinSceneViewPostPassPlan_Test, SkipsSelectionOutlineWhenObjectIdShaderViewIsMissing) {
|
||||||
|
BuiltinSceneViewPostPassPlanInput input = {};
|
||||||
|
input.overlayValid = true;
|
||||||
|
input.hasSelection = true;
|
||||||
|
|
||||||
|
const auto plan = BuildBuiltinSceneViewPostPassPlan(input);
|
||||||
|
|
||||||
|
ASSERT_TRUE(plan.valid);
|
||||||
|
EXPECT_EQ(
|
||||||
|
plan.steps,
|
||||||
|
(std::vector<BuiltinSceneViewPostPassStep>{
|
||||||
|
BuiltinSceneViewPostPassStep::ColorToRenderTarget,
|
||||||
|
BuiltinSceneViewPostPassStep::InfiniteGrid,
|
||||||
|
BuiltinSceneViewPostPassStep::ColorToShaderResource
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(BuiltinSceneViewPostPassPlan_Test, BuildsDebugMaskPlanFromObjectIdShaderView) {
|
||||||
|
BuiltinSceneViewPostPassPlanInput input = {};
|
||||||
|
input.overlayValid = true;
|
||||||
|
input.hasSelection = true;
|
||||||
|
input.debugSelectionMask = true;
|
||||||
|
input.hasObjectIdShaderView = true;
|
||||||
|
|
||||||
|
const auto plan = BuildBuiltinSceneViewPostPassPlan(input);
|
||||||
|
|
||||||
|
ASSERT_TRUE(plan.valid);
|
||||||
|
EXPECT_EQ(
|
||||||
|
plan.steps,
|
||||||
|
(std::vector<BuiltinSceneViewPostPassStep>{
|
||||||
|
BuiltinSceneViewPostPassStep::ColorToRenderTarget,
|
||||||
|
BuiltinSceneViewPostPassStep::SelectionMaskDebug,
|
||||||
|
BuiltinSceneViewPostPassStep::ColorToShaderResource
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(BuiltinSceneViewPostPassPlan_Test, DebugMaskPlanFallsBackWhenObjectIdShaderViewIsMissing) {
|
||||||
|
BuiltinSceneViewPostPassPlanInput input = {};
|
||||||
|
input.overlayValid = true;
|
||||||
|
input.hasSelection = true;
|
||||||
|
input.debugSelectionMask = true;
|
||||||
|
|
||||||
|
const auto plan = BuildBuiltinSceneViewPostPassPlan(input);
|
||||||
|
|
||||||
|
ASSERT_TRUE(plan.valid);
|
||||||
|
EXPECT_EQ(
|
||||||
|
plan.steps,
|
||||||
|
(std::vector<BuiltinSceneViewPostPassStep>{
|
||||||
|
BuiltinSceneViewPostPassStep::ColorToRenderTarget,
|
||||||
|
BuiltinSceneViewPostPassStep::ColorToShaderResource
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace
|
||||||
@@ -8,7 +8,6 @@ set(EDITOR_TEST_SOURCES
|
|||||||
test_scene_viewport_move_gizmo.cpp
|
test_scene_viewport_move_gizmo.cpp
|
||||||
test_scene_viewport_rotate_gizmo.cpp
|
test_scene_viewport_rotate_gizmo.cpp
|
||||||
test_scene_viewport_scale_gizmo.cpp
|
test_scene_viewport_scale_gizmo.cpp
|
||||||
test_scene_viewport_post_pass_plan.cpp
|
|
||||||
test_scene_viewport_picker.cpp
|
test_scene_viewport_picker.cpp
|
||||||
test_scene_viewport_overlay_renderer.cpp
|
test_scene_viewport_overlay_renderer.cpp
|
||||||
test_scene_viewport_selection_utils.cpp
|
test_scene_viewport_selection_utils.cpp
|
||||||
|
|||||||
@@ -1,108 +0,0 @@
|
|||||||
#include <gtest/gtest.h>
|
|
||||||
|
|
||||||
#include "Viewport/SceneViewportPostPassPlan.h"
|
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
namespace {
|
|
||||||
|
|
||||||
using XCEngine::Editor::BuildSceneViewportPostPassPlan;
|
|
||||||
using XCEngine::Editor::SceneViewportPostPassPlanInput;
|
|
||||||
using XCEngine::Editor::SceneViewportPostPassStep;
|
|
||||||
|
|
||||||
TEST(SceneViewportPostPassPlan_Test, ReturnsInvalidPlanWhenOverlayIsUnavailable) {
|
|
||||||
const auto plan = BuildSceneViewportPostPassPlan({});
|
|
||||||
|
|
||||||
EXPECT_FALSE(plan.valid);
|
|
||||||
EXPECT_TRUE(plan.steps.empty());
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST(SceneViewportPostPassPlan_Test, BuildsGridOnlyPlanWhenNothingIsSelected) {
|
|
||||||
SceneViewportPostPassPlanInput input = {};
|
|
||||||
input.overlayValid = true;
|
|
||||||
|
|
||||||
const auto plan = BuildSceneViewportPostPassPlan(input);
|
|
||||||
|
|
||||||
ASSERT_TRUE(plan.valid);
|
|
||||||
EXPECT_EQ(
|
|
||||||
plan.steps,
|
|
||||||
(std::vector<SceneViewportPostPassStep>{
|
|
||||||
SceneViewportPostPassStep::ColorToRenderTarget,
|
|
||||||
SceneViewportPostPassStep::InfiniteGrid,
|
|
||||||
SceneViewportPostPassStep::ColorToShaderResource
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST(SceneViewportPostPassPlan_Test, BuildsSelectionOutlinePlanWhenObjectIdShaderViewExists) {
|
|
||||||
SceneViewportPostPassPlanInput input = {};
|
|
||||||
input.overlayValid = true;
|
|
||||||
input.hasSelection = true;
|
|
||||||
input.hasObjectIdShaderView = true;
|
|
||||||
|
|
||||||
const auto plan = BuildSceneViewportPostPassPlan(input);
|
|
||||||
|
|
||||||
ASSERT_TRUE(plan.valid);
|
|
||||||
EXPECT_EQ(
|
|
||||||
plan.steps,
|
|
||||||
(std::vector<SceneViewportPostPassStep>{
|
|
||||||
SceneViewportPostPassStep::ColorToRenderTarget,
|
|
||||||
SceneViewportPostPassStep::InfiniteGrid,
|
|
||||||
SceneViewportPostPassStep::SelectionOutline,
|
|
||||||
SceneViewportPostPassStep::ColorToShaderResource
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST(SceneViewportPostPassPlan_Test, SkipsSelectionOutlineWhenObjectIdShaderViewIsMissing) {
|
|
||||||
SceneViewportPostPassPlanInput input = {};
|
|
||||||
input.overlayValid = true;
|
|
||||||
input.hasSelection = true;
|
|
||||||
|
|
||||||
const auto plan = BuildSceneViewportPostPassPlan(input);
|
|
||||||
|
|
||||||
ASSERT_TRUE(plan.valid);
|
|
||||||
EXPECT_EQ(
|
|
||||||
plan.steps,
|
|
||||||
(std::vector<SceneViewportPostPassStep>{
|
|
||||||
SceneViewportPostPassStep::ColorToRenderTarget,
|
|
||||||
SceneViewportPostPassStep::InfiniteGrid,
|
|
||||||
SceneViewportPostPassStep::ColorToShaderResource
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST(SceneViewportPostPassPlan_Test, BuildsDebugMaskPlanFromObjectIdShaderView) {
|
|
||||||
SceneViewportPostPassPlanInput input = {};
|
|
||||||
input.overlayValid = true;
|
|
||||||
input.hasSelection = true;
|
|
||||||
input.debugSelectionMask = true;
|
|
||||||
input.hasObjectIdShaderView = true;
|
|
||||||
|
|
||||||
const auto plan = BuildSceneViewportPostPassPlan(input);
|
|
||||||
|
|
||||||
ASSERT_TRUE(plan.valid);
|
|
||||||
EXPECT_EQ(
|
|
||||||
plan.steps,
|
|
||||||
(std::vector<SceneViewportPostPassStep>{
|
|
||||||
SceneViewportPostPassStep::ColorToRenderTarget,
|
|
||||||
SceneViewportPostPassStep::SelectionMaskDebug,
|
|
||||||
SceneViewportPostPassStep::ColorToShaderResource
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST(SceneViewportPostPassPlan_Test, DebugMaskPlanFallsBackWhenObjectIdShaderViewIsMissing) {
|
|
||||||
SceneViewportPostPassPlanInput input = {};
|
|
||||||
input.overlayValid = true;
|
|
||||||
input.hasSelection = true;
|
|
||||||
input.debugSelectionMask = true;
|
|
||||||
|
|
||||||
const auto plan = BuildSceneViewportPostPassPlan(input);
|
|
||||||
|
|
||||||
ASSERT_TRUE(plan.valid);
|
|
||||||
EXPECT_EQ(
|
|
||||||
plan.steps,
|
|
||||||
(std::vector<SceneViewportPostPassStep>{
|
|
||||||
SceneViewportPostPassStep::ColorToRenderTarget,
|
|
||||||
SceneViewportPostPassStep::ColorToShaderResource
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace
|
|
||||||
Reference in New Issue
Block a user