refactor: generalize renderer builtin post process
This commit is contained in:
143
tests/Rendering/unit/test_builtin_post_process_pass_plan.cpp
Normal file
143
tests/Rendering/unit/test_builtin_post_process_pass_plan.cpp
Normal file
@@ -0,0 +1,143 @@
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include <XCEngine/Rendering/Passes/BuiltinPostProcessPassPlan.h>
|
||||
|
||||
#include <vector>
|
||||
|
||||
namespace {
|
||||
|
||||
using XCEngine::Rendering::Passes::BuildBuiltinPostProcessPassPlan;
|
||||
using XCEngine::Rendering::Passes::BuiltinPostProcessPassPlanInput;
|
||||
using XCEngine::Rendering::Passes::BuiltinPostProcessPassStep;
|
||||
|
||||
TEST(BuiltinPostProcessPassPlan_Test, ReturnsInvalidPlanWhenNoBuiltinEffectIsAvailable) {
|
||||
const auto plan = BuildBuiltinPostProcessPassPlan({});
|
||||
|
||||
EXPECT_FALSE(plan.valid);
|
||||
EXPECT_TRUE(plan.steps.empty());
|
||||
}
|
||||
|
||||
TEST(BuiltinPostProcessPassPlan_Test, BuildsGridOnlyPlanWhenNothingIsSelected) {
|
||||
BuiltinPostProcessPassPlanInput input = {};
|
||||
input.hasGridOverlay = true;
|
||||
|
||||
const auto plan = BuildBuiltinPostProcessPassPlan(input);
|
||||
|
||||
ASSERT_TRUE(plan.valid);
|
||||
EXPECT_EQ(
|
||||
plan.steps,
|
||||
(std::vector<BuiltinPostProcessPassStep>{
|
||||
BuiltinPostProcessPassStep::ColorToRenderTarget,
|
||||
BuiltinPostProcessPassStep::InfiniteGrid,
|
||||
BuiltinPostProcessPassStep::ColorToShaderResource
|
||||
}));
|
||||
}
|
||||
|
||||
TEST(BuiltinPostProcessPassPlan_Test, BuildsGridAndSelectionOutlinePlanWhenObjectIdShaderViewExists) {
|
||||
BuiltinPostProcessPassPlanInput input = {};
|
||||
input.hasGridOverlay = true;
|
||||
input.hasSelection = true;
|
||||
input.hasObjectIdShaderView = true;
|
||||
|
||||
const auto plan = BuildBuiltinPostProcessPassPlan(input);
|
||||
|
||||
ASSERT_TRUE(plan.valid);
|
||||
EXPECT_EQ(
|
||||
plan.steps,
|
||||
(std::vector<BuiltinPostProcessPassStep>{
|
||||
BuiltinPostProcessPassStep::ColorToRenderTarget,
|
||||
BuiltinPostProcessPassStep::InfiniteGrid,
|
||||
BuiltinPostProcessPassStep::SelectionOutline,
|
||||
BuiltinPostProcessPassStep::ColorToShaderResource
|
||||
}));
|
||||
}
|
||||
|
||||
TEST(BuiltinPostProcessPassPlan_Test, SkipsSelectionOutlineWhenObjectIdShaderViewIsMissingAndGridExists) {
|
||||
BuiltinPostProcessPassPlanInput input = {};
|
||||
input.hasGridOverlay = true;
|
||||
input.hasSelection = true;
|
||||
|
||||
const auto plan = BuildBuiltinPostProcessPassPlan(input);
|
||||
|
||||
ASSERT_TRUE(plan.valid);
|
||||
EXPECT_EQ(
|
||||
plan.steps,
|
||||
(std::vector<BuiltinPostProcessPassStep>{
|
||||
BuiltinPostProcessPassStep::ColorToRenderTarget,
|
||||
BuiltinPostProcessPassStep::InfiniteGrid,
|
||||
BuiltinPostProcessPassStep::ColorToShaderResource
|
||||
}));
|
||||
}
|
||||
|
||||
TEST(BuiltinPostProcessPassPlan_Test, BuildsDebugMaskPlanFromObjectIdShaderView) {
|
||||
BuiltinPostProcessPassPlanInput input = {};
|
||||
input.hasGridOverlay = true;
|
||||
input.hasSelection = true;
|
||||
input.debugSelectionMask = true;
|
||||
input.hasObjectIdShaderView = true;
|
||||
|
||||
const auto plan = BuildBuiltinPostProcessPassPlan(input);
|
||||
|
||||
ASSERT_TRUE(plan.valid);
|
||||
EXPECT_EQ(
|
||||
plan.steps,
|
||||
(std::vector<BuiltinPostProcessPassStep>{
|
||||
BuiltinPostProcessPassStep::ColorToRenderTarget,
|
||||
BuiltinPostProcessPassStep::SelectionMaskDebug,
|
||||
BuiltinPostProcessPassStep::ColorToShaderResource
|
||||
}));
|
||||
}
|
||||
|
||||
TEST(BuiltinPostProcessPassPlan_Test, DebugMaskPlanFallsBackToTransitionsWhenGridExistsButObjectIdShaderViewIsMissing) {
|
||||
BuiltinPostProcessPassPlanInput input = {};
|
||||
input.hasGridOverlay = true;
|
||||
input.hasSelection = true;
|
||||
input.debugSelectionMask = true;
|
||||
|
||||
const auto plan = BuildBuiltinPostProcessPassPlan(input);
|
||||
|
||||
ASSERT_TRUE(plan.valid);
|
||||
EXPECT_EQ(
|
||||
plan.steps,
|
||||
(std::vector<BuiltinPostProcessPassStep>{
|
||||
BuiltinPostProcessPassStep::ColorToRenderTarget,
|
||||
BuiltinPostProcessPassStep::ColorToShaderResource
|
||||
}));
|
||||
}
|
||||
|
||||
TEST(BuiltinPostProcessPassPlan_Test, BuildsSelectionOnlyOutlinePlanWhenGridOverlayIsUnavailable) {
|
||||
BuiltinPostProcessPassPlanInput input = {};
|
||||
input.hasSelection = true;
|
||||
input.hasObjectIdShaderView = true;
|
||||
|
||||
const auto plan = BuildBuiltinPostProcessPassPlan(input);
|
||||
|
||||
ASSERT_TRUE(plan.valid);
|
||||
EXPECT_EQ(
|
||||
plan.steps,
|
||||
(std::vector<BuiltinPostProcessPassStep>{
|
||||
BuiltinPostProcessPassStep::ColorToRenderTarget,
|
||||
BuiltinPostProcessPassStep::SelectionOutline,
|
||||
BuiltinPostProcessPassStep::ColorToShaderResource
|
||||
}));
|
||||
}
|
||||
|
||||
TEST(BuiltinPostProcessPassPlan_Test, BuildsDebugMaskWithoutGridWhenObjectIdShaderViewExists) {
|
||||
BuiltinPostProcessPassPlanInput input = {};
|
||||
input.hasSelection = true;
|
||||
input.debugSelectionMask = true;
|
||||
input.hasObjectIdShaderView = true;
|
||||
|
||||
const auto plan = BuildBuiltinPostProcessPassPlan(input);
|
||||
|
||||
ASSERT_TRUE(plan.valid);
|
||||
EXPECT_EQ(
|
||||
plan.steps,
|
||||
(std::vector<BuiltinPostProcessPassStep>{
|
||||
BuiltinPostProcessPassStep::ColorToRenderTarget,
|
||||
BuiltinPostProcessPassStep::SelectionMaskDebug,
|
||||
BuiltinPostProcessPassStep::ColorToShaderResource
|
||||
}));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
Reference in New Issue
Block a user