Files
XCEngine/tests/Rendering/unit/test_builtin_post_process_pass_plan.cpp

144 lines
4.7 KiB
C++

#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