Formalize camera post-process descriptors

This commit is contained in:
2026-04-06 14:56:43 +08:00
parent 3a64c325bf
commit b6132aec4d
9 changed files with 400 additions and 41 deletions

View File

@@ -32,6 +32,7 @@ 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_TRUE(camera.GetPostProcessPasses().empty());
EXPECT_FALSE(camera.IsColorScalePostProcessEnabled());
EXPECT_FLOAT_EQ(camera.GetColorScalePostProcessScale().x, 1.0f);
EXPECT_FLOAT_EQ(camera.GetColorScalePostProcessScale().y, 1.0f);
@@ -75,9 +76,11 @@ 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.SetColorScalePostProcessPasses({
XCEngine::Math::Vector4(0.55f, 0.8f, 1.2f, 1.0f),
XCEngine::Math::Vector4(1.0f, 0.95f, 0.75f, 1.0f)
source.SetPostProcessPasses({
XCEngine::Rendering::CameraPostProcessPassDesc::MakeColorScale(
XCEngine::Math::Vector4(0.55f, 0.8f, 1.2f, 1.0f)),
XCEngine::Rendering::CameraPostProcessPassDesc::MakeColorScale(
XCEngine::Math::Vector4(1.0f, 0.95f, 0.75f, 1.0f))
});
std::stringstream stream;
@@ -98,6 +101,13 @@ 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);
ASSERT_EQ(target.GetPostProcessPasses().size(), 2u);
EXPECT_EQ(
target.GetPostProcessPasses()[0].type,
XCEngine::Rendering::CameraPostProcessPassType::ColorScale);
EXPECT_EQ(
target.GetPostProcessPasses()[1].type,
XCEngine::Rendering::CameraPostProcessPassType::ColorScale);
EXPECT_TRUE(target.IsColorScalePostProcessEnabled());
EXPECT_FLOAT_EQ(target.GetColorScalePostProcessScale().x, 0.55f);
EXPECT_FLOAT_EQ(target.GetColorScalePostProcessScale().y, 0.8f);
@@ -110,6 +120,27 @@ TEST(CameraComponent_Test, SerializeRoundTripPreservesViewportAndClearState) {
EXPECT_FLOAT_EQ(target.GetColorScalePostProcessPasses()[1].w, 1.0f);
}
TEST(CameraComponent_Test, DeserializeLegacyColorScalePostProcessFields) {
std::stringstream stream;
stream
<< "colorScalePostProcessEnabled=1;"
<< "colorScalePostProcessScale=0.55,0.8,1.2,1;"
<< "colorScalePostProcessPassCount=2;"
<< "colorScalePostProcessPass0=0.55,0.8,1.2,1;"
<< "colorScalePostProcessPass1=1,0.95,0.75,1;";
CameraComponent camera;
camera.Deserialize(stream);
ASSERT_EQ(camera.GetPostProcessPasses().size(), 2u);
EXPECT_EQ(
camera.GetPostProcessPasses()[0].type,
XCEngine::Rendering::CameraPostProcessPassType::ColorScale);
EXPECT_TRUE(camera.IsColorScalePostProcessEnabled());
EXPECT_FLOAT_EQ(camera.GetColorScalePostProcessPasses()[0].x, 0.55f);
EXPECT_FLOAT_EQ(camera.GetColorScalePostProcessPasses()[1].y, 0.95f);
}
TEST(CameraComponent_Test, LegacyColorScaleAccessorsDriveFirstPass) {
CameraComponent camera;