Support camera-config color-scale pass stacks

This commit is contained in:
2026-04-06 14:37:54 +08:00
parent f0d3f251b4
commit 3a64c325bf
6 changed files with 154 additions and 30 deletions

View File

@@ -37,6 +37,7 @@ TEST(CameraComponent_Test, DefaultValues) {
EXPECT_FLOAT_EQ(camera.GetColorScalePostProcessScale().y, 1.0f);
EXPECT_FLOAT_EQ(camera.GetColorScalePostProcessScale().z, 1.0f);
EXPECT_FLOAT_EQ(camera.GetColorScalePostProcessScale().w, 1.0f);
EXPECT_TRUE(camera.GetColorScalePostProcessPasses().empty());
}
TEST(CameraComponent_Test, SetterClamping) {
@@ -74,8 +75,10 @@ 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));
source.SetColorScalePostProcessPasses({
XCEngine::Math::Vector4(0.55f, 0.8f, 1.2f, 1.0f),
XCEngine::Math::Vector4(1.0f, 0.95f, 0.75f, 1.0f)
});
std::stringstream stream;
source.Serialize(stream);
@@ -100,6 +103,34 @@ TEST(CameraComponent_Test, SerializeRoundTripPreservesViewportAndClearState) {
EXPECT_FLOAT_EQ(target.GetColorScalePostProcessScale().y, 0.8f);
EXPECT_FLOAT_EQ(target.GetColorScalePostProcessScale().z, 1.2f);
EXPECT_FLOAT_EQ(target.GetColorScalePostProcessScale().w, 1.0f);
ASSERT_EQ(target.GetColorScalePostProcessPasses().size(), 2u);
EXPECT_FLOAT_EQ(target.GetColorScalePostProcessPasses()[1].x, 1.0f);
EXPECT_FLOAT_EQ(target.GetColorScalePostProcessPasses()[1].y, 0.95f);
EXPECT_FLOAT_EQ(target.GetColorScalePostProcessPasses()[1].z, 0.75f);
EXPECT_FLOAT_EQ(target.GetColorScalePostProcessPasses()[1].w, 1.0f);
}
TEST(CameraComponent_Test, LegacyColorScaleAccessorsDriveFirstPass) {
CameraComponent camera;
camera.SetColorScalePostProcessScale(XCEngine::Math::Vector4(0.55f, 0.8f, 1.2f, 1.0f));
EXPECT_FALSE(camera.IsColorScalePostProcessEnabled());
camera.SetColorScalePostProcessEnabled(true);
ASSERT_EQ(camera.GetColorScalePostProcessPasses().size(), 1u);
EXPECT_FLOAT_EQ(camera.GetColorScalePostProcessPasses()[0].x, 0.55f);
EXPECT_FLOAT_EQ(camera.GetColorScalePostProcessPasses()[0].y, 0.8f);
EXPECT_FLOAT_EQ(camera.GetColorScalePostProcessPasses()[0].z, 1.2f);
EXPECT_FLOAT_EQ(camera.GetColorScalePostProcessPasses()[0].w, 1.0f);
camera.AddColorScalePostProcessPass(XCEngine::Math::Vector4(1.0f, 0.95f, 0.75f, 1.0f));
camera.SetColorScalePostProcessScale(XCEngine::Math::Vector4(0.6f, 0.7f, 1.1f, 1.0f));
ASSERT_EQ(camera.GetColorScalePostProcessPasses().size(), 2u);
EXPECT_FLOAT_EQ(camera.GetColorScalePostProcessPasses()[0].x, 0.6f);
EXPECT_FLOAT_EQ(camera.GetColorScalePostProcessPasses()[0].y, 0.7f);
EXPECT_FLOAT_EQ(camera.GetColorScalePostProcessPasses()[0].z, 1.1f);
EXPECT_FLOAT_EQ(camera.GetColorScalePostProcessPasses()[1].y, 0.95f);
}
TEST(LightComponent_Test, DefaultValues) {