Formalize final color policy resolution
This commit is contained in:
@@ -279,6 +279,7 @@ private:
|
||||
struct MockPipelineAssetState {
|
||||
int createCalls = 0;
|
||||
std::shared_ptr<MockPipelineState> lastCreatedPipelineState;
|
||||
FinalColorSettings defaultFinalColorSettings = {};
|
||||
};
|
||||
|
||||
class MockPipeline final : public RenderPipeline {
|
||||
@@ -344,6 +345,10 @@ public:
|
||||
return std::make_unique<MockPipeline>(m_state->lastCreatedPipelineState);
|
||||
}
|
||||
|
||||
FinalColorSettings GetDefaultFinalColorSettings() const override {
|
||||
return m_state->defaultFinalColorSettings;
|
||||
}
|
||||
|
||||
private:
|
||||
std::shared_ptr<MockPipelineAssetState> m_state;
|
||||
};
|
||||
@@ -1838,6 +1843,50 @@ TEST(SceneRenderer_Test, BuildsCameraColorScalePostProcessRequestFromCameraPassS
|
||||
delete backBufferColorView;
|
||||
}
|
||||
|
||||
TEST(SceneRenderer_Test, ResolvesFinalColorPolicyFromPipelineDefaultsAndCameraOverrides) {
|
||||
Scene scene("SceneRendererFinalColorPolicyScene");
|
||||
|
||||
GameObject* cameraObject = scene.CreateGameObject("Camera");
|
||||
auto* camera = cameraObject->AddComponent<CameraComponent>();
|
||||
camera->SetPrimary(true);
|
||||
camera->SetDepth(2.0f);
|
||||
|
||||
FinalColorOverrideSettings cameraOverrides = {};
|
||||
cameraOverrides.overrideExposureValue = true;
|
||||
cameraOverrides.exposureValue = 1.8f;
|
||||
cameraOverrides.overrideFinalColorScale = true;
|
||||
cameraOverrides.finalColorScale = XCEngine::Math::Vector4(0.95f, 0.9f, 0.85f, 1.0f);
|
||||
camera->SetFinalColorOverrides(cameraOverrides);
|
||||
|
||||
auto assetState = std::make_shared<MockPipelineAssetState>();
|
||||
assetState->defaultFinalColorSettings.outputTransferMode =
|
||||
FinalColorOutputTransferMode::LinearToSRGB;
|
||||
assetState->defaultFinalColorSettings.exposureMode =
|
||||
FinalColorExposureMode::Fixed;
|
||||
assetState->defaultFinalColorSettings.exposureValue = 1.25f;
|
||||
assetState->defaultFinalColorSettings.finalColorScale =
|
||||
XCEngine::Math::Vector4(1.0f, 0.95f, 0.9f, 1.0f);
|
||||
|
||||
SceneRenderer renderer(std::make_shared<MockPipelineAsset>(assetState));
|
||||
const std::vector<CameraRenderRequest> requests =
|
||||
renderer.BuildRenderRequests(scene, nullptr, CreateValidContext(), RenderSurface(640, 360));
|
||||
|
||||
ASSERT_EQ(requests.size(), 1u);
|
||||
const CameraRenderRequest& request = requests[0];
|
||||
EXPECT_TRUE(request.finalColorPolicy.hasPipelineDefaults);
|
||||
EXPECT_TRUE(request.finalColorPolicy.hasCameraOverrides);
|
||||
EXPECT_FALSE(request.finalColorPolicy.hasVolumeOverrides);
|
||||
EXPECT_EQ(
|
||||
request.finalColorPolicy.outputTransferMode,
|
||||
FinalColorOutputTransferMode::LinearToSRGB);
|
||||
EXPECT_EQ(
|
||||
request.finalColorPolicy.exposureMode,
|
||||
FinalColorExposureMode::Fixed);
|
||||
EXPECT_FLOAT_EQ(request.finalColorPolicy.exposureValue, 1.8f);
|
||||
EXPECT_FLOAT_EQ(request.finalColorPolicy.finalColorScale.x, 0.95f);
|
||||
EXPECT_FALSE(request.finalOutput.IsRequested());
|
||||
}
|
||||
|
||||
TEST(CameraRenderer_Test, UsesResolvedRenderAreaForCameraViewportDimensions) {
|
||||
Scene scene("CameraRendererViewportRectScene");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user