X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=effect_chain_test.cpp;h=a8cb41f044d1fa9b6070fb32b676abc3f373a195;hp=32beb41b45df0c4e67c7490f884f3581eb2b2963;hb=d47ac1e362683896033f43ecd9aeb2f2330b5678;hpb=4cf76ac1b1565a8710b2906dbd2d03a2b53cedfe diff --git a/effect_chain_test.cpp b/effect_chain_test.cpp index 32beb41..a8cb41f 100644 --- a/effect_chain_test.cpp +++ b/effect_chain_test.cpp @@ -1022,6 +1022,38 @@ TEST(EffectChainTest, AspectRatioConversion) { EXPECT_EQ(7, input_store->input_height); } +// Tests that putting a BlueInput (constant color) into its own pass, +// which creates a phase that doesn't need texture coordinates, +// doesn't mess up a second phase that actually does. +TEST(EffectChainTest, FirstPhaseWithNoTextureCoordinates) { + const int size = 2; + float data[] = { + 1.0f, + 0.0f, + }; + float expected_data[] = { + 1.0f, 1.0f, 2.0f, 2.0f, + 0.0f, 0.0f, 1.0f, 2.0f, + }; + float out_data[size * 4]; + // First say that we have sRGB, linear input. + ImageFormat format; + format.color_space = COLORSPACE_sRGB; + format.gamma_curve = GAMMA_LINEAR; + FlatInput *input = new FlatInput(format, FORMAT_GRAYSCALE, GL_FLOAT, 1, size); + + input->set_pixel_data(data); + EffectChainTester tester(NULL, 1, size); + tester.get_chain()->add_input(new BlueInput()); + Effect *phase1_end = tester.get_chain()->add_effect(new BouncingIdentityEffect()); + tester.get_chain()->add_input(input); + tester.get_chain()->add_effect(new AddEffect(), phase1_end, input); + + tester.run(out_data, GL_RGBA, COLORSPACE_sRGB, GAMMA_LINEAR, OUTPUT_ALPHA_FORMAT_POSTMULTIPLIED); + + expect_equal(expected_data, out_data, 4, size); +} + // An effect that does nothing except changing its output sizes. class VirtualResizeEffect : public Effect { public: @@ -1271,5 +1303,20 @@ TEST(EffectChainTest, StringStreamLocalesWork) { free(saved_locale); } +TEST(EffectChainTest, sRGBIntermediate) { + float data[] = { + 0.0f, 0.25f, 0.0f, 1.0f, + }; + float expected_data[] = { + 0.0f, 0.25048828125f, 0.0f, 1.0f, + }; + float out_data[4]; + EffectChainTester tester(data, 1, 1, FORMAT_RGBA_PREMULTIPLIED_ALPHA, COLORSPACE_sRGB, GAMMA_LINEAR, GL_RGBA16F_ARB, GL_SRGB8); + tester.get_chain()->add_effect(new IdentityEffect()); + tester.get_chain()->add_effect(new BouncingIdentityEffect()); + tester.run(out_data, GL_RGBA, COLORSPACE_sRGB, GAMMA_LINEAR); + + expect_equal(expected_data, out_data, 4, 1, 1e-4); +} } // namespace movit