Remove scene viewport postprocess API from engine
This commit is contained in:
@@ -1,143 +0,0 @@
|
||||
#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
|
||||
@@ -1,109 +0,0 @@
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include <XCEngine/Rendering/Passes/BuiltinPostProcessPassSequenceBuilder.h>
|
||||
|
||||
namespace {
|
||||
|
||||
using XCEngine::Rendering::Passes::BuiltinPostProcessPassSequenceBuilder;
|
||||
using XCEngine::Rendering::Passes::BuiltinPostProcessPassSequenceInput;
|
||||
using XCEngine::Rendering::Passes::ObjectIdOutlineStyle;
|
||||
using XCEngine::Rendering::RenderPassSequence;
|
||||
|
||||
TEST(BuiltinPostProcessPassSequenceBuilder_Test, ReturnsInvalidSequenceWhenNoBuiltinEffectIsRequested) {
|
||||
BuiltinPostProcessPassSequenceBuilder builder;
|
||||
RenderPassSequence sequence;
|
||||
|
||||
const auto result = builder.Build({}, sequence);
|
||||
|
||||
EXPECT_FALSE(result.valid);
|
||||
EXPECT_FALSE(result.missingObjectIdTextureViewForSelection);
|
||||
EXPECT_EQ(sequence.GetPassCount(), 0u);
|
||||
}
|
||||
|
||||
TEST(BuiltinPostProcessPassSequenceBuilder_Test, BuildsGridOnlySequenceWhenNothingIsSelected) {
|
||||
BuiltinPostProcessPassSequenceBuilder builder;
|
||||
RenderPassSequence sequence;
|
||||
BuiltinPostProcessPassSequenceInput 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(BuiltinPostProcessPassSequenceBuilder_Test, BuildsGridAndSelectionOutlineSequenceWhenObjectIdTextureViewExists) {
|
||||
BuiltinPostProcessPassSequenceBuilder builder;
|
||||
RenderPassSequence sequence;
|
||||
BuiltinPostProcessPassSequenceInput 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(BuiltinPostProcessPassSequenceBuilder_Test, ReportsMissingObjectIdTextureViewAndFallsBackToGridOnlySequence) {
|
||||
BuiltinPostProcessPassSequenceBuilder builder;
|
||||
RenderPassSequence sequence;
|
||||
BuiltinPostProcessPassSequenceInput 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(BuiltinPostProcessPassSequenceBuilder_Test, BuildsDebugMaskSequenceWhenRequested) {
|
||||
BuiltinPostProcessPassSequenceBuilder builder;
|
||||
RenderPassSequence sequence;
|
||||
BuiltinPostProcessPassSequenceInput 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);
|
||||
}
|
||||
|
||||
TEST(BuiltinPostProcessPassSequenceBuilder_Test, BuildsSelectionOnlyOutlineSequenceWhenGridDataIsUnavailable) {
|
||||
BuiltinPostProcessPassSequenceBuilder builder;
|
||||
RenderPassSequence sequence;
|
||||
BuiltinPostProcessPassSequenceInput input = {};
|
||||
input.objectIdTextureView = reinterpret_cast<XCEngine::RHI::RHIResourceView*>(1);
|
||||
input.selectedObjectIds = { 13u };
|
||||
|
||||
const auto result = builder.Build(input, sequence);
|
||||
|
||||
EXPECT_TRUE(result.valid);
|
||||
EXPECT_FALSE(result.missingObjectIdTextureViewForSelection);
|
||||
EXPECT_EQ(sequence.GetPassCount(), 3u);
|
||||
}
|
||||
|
||||
TEST(BuiltinPostProcessPassSequenceBuilder_Test, ReportsInvalidSelectionOnlySequenceWhenObjectIdTextureViewIsMissing) {
|
||||
BuiltinPostProcessPassSequenceBuilder builder;
|
||||
RenderPassSequence sequence;
|
||||
BuiltinPostProcessPassSequenceInput input = {};
|
||||
input.selectedObjectIds = { 13u };
|
||||
|
||||
const auto result = builder.Build(input, sequence);
|
||||
|
||||
EXPECT_FALSE(result.valid);
|
||||
EXPECT_TRUE(result.missingObjectIdTextureViewForSelection);
|
||||
EXPECT_EQ(sequence.GetPassCount(), 0u);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
@@ -438,31 +438,6 @@ TEST(CameraRenderer_Test, ShutsDownSequencesWhenPostPassInitializationFails) {
|
||||
"shutdown:pre" }));
|
||||
}
|
||||
|
||||
TEST(CameraRenderer_Test, RejectsBuiltinPostProcessThatCannotProduceFreshObjectIdData) {
|
||||
Scene scene("CameraRendererBuiltinPostProcessValidationScene");
|
||||
|
||||
GameObject* cameraObject = scene.CreateGameObject("Camera");
|
||||
auto* camera = cameraObject->AddComponent<CameraComponent>();
|
||||
camera->SetPrimary(true);
|
||||
camera->SetDepth(4.0f);
|
||||
|
||||
auto state = std::make_shared<MockPipelineState>();
|
||||
CameraRenderer renderer(std::make_unique<MockPipeline>(state));
|
||||
|
||||
CameraRenderRequest request;
|
||||
request.scene = &scene;
|
||||
request.camera = camera;
|
||||
request.context = CreateValidContext();
|
||||
request.surface = RenderSurface(512, 512);
|
||||
request.cameraDepth = camera->GetDepth();
|
||||
request.builtinPostProcess.gridPassData.valid = true;
|
||||
request.builtinPostProcess.objectIdTextureView =
|
||||
reinterpret_cast<XCEngine::RHI::RHIResourceView*>(1);
|
||||
|
||||
EXPECT_FALSE(renderer.Render(request));
|
||||
EXPECT_TRUE(state->eventLog.empty());
|
||||
}
|
||||
|
||||
TEST(SceneRenderer_Test, BuildsSortedRequestsForAllUsableCamerasAndHonorsOverrideCamera) {
|
||||
Scene scene("SceneRendererRequestScene");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user