Wire camera-config post-process requests
This commit is contained in:
@@ -32,6 +32,11 @@ TEST(CameraComponent_Test, DefaultValues) {
|
||||
EXPECT_FLOAT_EQ(camera.GetSkyboxTopColor().r, 0.18f);
|
||||
EXPECT_FLOAT_EQ(camera.GetSkyboxHorizonColor().g, 0.84f);
|
||||
EXPECT_FLOAT_EQ(camera.GetSkyboxBottomColor().b, 0.95f);
|
||||
EXPECT_FALSE(camera.IsColorScalePostProcessEnabled());
|
||||
EXPECT_FLOAT_EQ(camera.GetColorScalePostProcessScale().x, 1.0f);
|
||||
EXPECT_FLOAT_EQ(camera.GetColorScalePostProcessScale().y, 1.0f);
|
||||
EXPECT_FLOAT_EQ(camera.GetColorScalePostProcessScale().z, 1.0f);
|
||||
EXPECT_FLOAT_EQ(camera.GetColorScalePostProcessScale().w, 1.0f);
|
||||
}
|
||||
|
||||
TEST(CameraComponent_Test, SetterClamping) {
|
||||
@@ -69,6 +74,8 @@ TEST(CameraComponent_Test, SerializeRoundTripPreservesViewportAndClearState) {
|
||||
source.SetSkyboxTopColor(XCEngine::Math::Color(0.12f, 0.21f, 0.64f, 1.0f));
|
||||
source.SetSkyboxHorizonColor(XCEngine::Math::Color(0.71f, 0.76f, 0.88f, 1.0f));
|
||||
source.SetSkyboxBottomColor(XCEngine::Math::Color(0.92f, 0.82f, 0.58f, 1.0f));
|
||||
source.SetColorScalePostProcessEnabled(true);
|
||||
source.SetColorScalePostProcessScale(XCEngine::Math::Vector4(0.55f, 0.8f, 1.2f, 1.0f));
|
||||
|
||||
std::stringstream stream;
|
||||
source.Serialize(stream);
|
||||
@@ -88,6 +95,11 @@ TEST(CameraComponent_Test, SerializeRoundTripPreservesViewportAndClearState) {
|
||||
EXPECT_FLOAT_EQ(target.GetSkyboxTopColor().b, 0.64f);
|
||||
EXPECT_FLOAT_EQ(target.GetSkyboxHorizonColor().g, 0.76f);
|
||||
EXPECT_FLOAT_EQ(target.GetSkyboxBottomColor().r, 0.92f);
|
||||
EXPECT_TRUE(target.IsColorScalePostProcessEnabled());
|
||||
EXPECT_FLOAT_EQ(target.GetColorScalePostProcessScale().x, 0.55f);
|
||||
EXPECT_FLOAT_EQ(target.GetColorScalePostProcessScale().y, 0.8f);
|
||||
EXPECT_FLOAT_EQ(target.GetColorScalePostProcessScale().z, 1.2f);
|
||||
EXPECT_FLOAT_EQ(target.GetColorScalePostProcessScale().w, 1.0f);
|
||||
}
|
||||
|
||||
TEST(LightComponent_Test, DefaultValues) {
|
||||
|
||||
@@ -1770,6 +1770,70 @@ TEST(SceneRenderer_Test, PreservesExistingSurfaceRenderAreaForFullViewportCamera
|
||||
EXPECT_EQ(renderArea.height, 240);
|
||||
}
|
||||
|
||||
TEST(SceneRenderer_Test, BuildsCameraColorScalePostProcessRequestFromCameraSettings) {
|
||||
Scene scene("SceneRendererCameraPostProcessScene");
|
||||
|
||||
GameObject* cameraObject = scene.CreateGameObject("Camera");
|
||||
auto* camera = cameraObject->AddComponent<CameraComponent>();
|
||||
camera->SetPrimary(true);
|
||||
camera->SetDepth(2.0f);
|
||||
camera->SetViewportRect(XCEngine::Math::Rect(0.25f, 0.125f, 0.5f, 0.625f));
|
||||
camera->SetColorScalePostProcessEnabled(true);
|
||||
camera->SetColorScalePostProcessScale(XCEngine::Math::Vector4(0.55f, 0.8f, 1.1f, 1.0f));
|
||||
|
||||
auto allocationState = std::make_shared<MockShadowAllocationState>();
|
||||
MockShadowDevice device(allocationState);
|
||||
|
||||
auto* backBufferColorView = new MockShadowView(
|
||||
allocationState,
|
||||
XCEngine::RHI::ResourceViewType::RenderTarget,
|
||||
XCEngine::RHI::Format::R8G8B8A8_UNorm,
|
||||
XCEngine::RHI::ResourceViewDimension::Texture2D);
|
||||
auto* depthView = new MockShadowView(
|
||||
allocationState,
|
||||
XCEngine::RHI::ResourceViewType::DepthStencil,
|
||||
XCEngine::RHI::Format::D24_UNorm_S8_UInt,
|
||||
XCEngine::RHI::ResourceViewDimension::Texture2D);
|
||||
|
||||
RenderContext context = CreateValidContext();
|
||||
context.device = &device;
|
||||
|
||||
RenderSurface surface(800, 600);
|
||||
surface.SetColorAttachment(backBufferColorView);
|
||||
surface.SetDepthAttachment(depthView);
|
||||
|
||||
SceneRenderer renderer;
|
||||
const std::vector<CameraRenderRequest> requests =
|
||||
renderer.BuildRenderRequests(scene, nullptr, context, surface);
|
||||
|
||||
ASSERT_EQ(requests.size(), 1u);
|
||||
const CameraRenderRequest& request = requests[0];
|
||||
EXPECT_TRUE(request.postProcess.IsRequested());
|
||||
EXPECT_TRUE(request.postProcess.IsValid());
|
||||
EXPECT_NE(request.postProcess.passes, nullptr);
|
||||
ASSERT_EQ(request.postProcess.passes->GetPassCount(), 1u);
|
||||
EXPECT_EQ(request.postProcess.destinationSurface.GetColorAttachments()[0], backBufferColorView);
|
||||
EXPECT_EQ(request.postProcess.destinationSurface.GetDepthAttachment(), depthView);
|
||||
EXPECT_EQ(request.postProcess.sourceSurface.GetDepthAttachment(), depthView);
|
||||
EXPECT_EQ(request.postProcess.sourceSurface.GetWidth(), 800u);
|
||||
EXPECT_EQ(request.postProcess.sourceSurface.GetHeight(), 600u);
|
||||
const XCEngine::Math::RectInt sourceRenderArea = request.postProcess.sourceSurface.GetRenderArea();
|
||||
EXPECT_EQ(sourceRenderArea.x, 200);
|
||||
EXPECT_EQ(sourceRenderArea.y, 75);
|
||||
EXPECT_EQ(sourceRenderArea.width, 400);
|
||||
EXPECT_EQ(sourceRenderArea.height, 375);
|
||||
EXPECT_NE(request.postProcess.sourceColorView, nullptr);
|
||||
EXPECT_NE(request.postProcess.sourceColorView, backBufferColorView);
|
||||
ASSERT_FALSE(request.postProcess.sourceSurface.GetColorAttachments().empty());
|
||||
EXPECT_NE(request.postProcess.sourceSurface.GetColorAttachments()[0], backBufferColorView);
|
||||
EXPECT_EQ(allocationState->createTextureCalls, 1);
|
||||
EXPECT_EQ(allocationState->createRenderTargetViewCalls, 1);
|
||||
EXPECT_EQ(allocationState->createShaderViewCalls, 1);
|
||||
|
||||
delete depthView;
|
||||
delete backBufferColorView;
|
||||
}
|
||||
|
||||
TEST(CameraRenderer_Test, UsesResolvedRenderAreaForCameraViewportDimensions) {
|
||||
Scene scene("CameraRendererViewportRectScene");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user