1 // Unit tests for EffectChain.
3 // Note that this also contains the tests for some of the simpler effects.
5 #include "effect_chain.h"
6 #include "flat_input.h"
7 #include "gtest/gtest.h"
8 #include "mirror_effect.h"
10 #include "test_util.h"
12 TEST(EffectChainTest, EmptyChain) {
18 EffectChainTester tester(data, 3, 2, COLORSPACE_sRGB, GAMMA_LINEAR);
19 tester.run(out_data, COLORSPACE_sRGB, GAMMA_LINEAR);
21 expect_equal(data, out_data, 3, 2);
24 // An effect that does nothing.
25 class IdentityEffect : public Effect {
28 virtual std::string effect_type_id() const { return "IdentityEffect"; }
29 std::string output_fragment_shader() { return read_file("identity.frag"); }
32 TEST(EffectChainTest, Identity) {
38 EffectChainTester tester(data, 3, 2, COLORSPACE_sRGB, GAMMA_LINEAR);
39 tester.get_chain()->add_effect(new IdentityEffect());
40 tester.run(out_data, COLORSPACE_sRGB, GAMMA_LINEAR);
42 expect_equal(data, out_data, 3, 2);
45 // An effect that does nothing, but requests texture bounce.
46 class BouncingIdentityEffect : public Effect {
48 BouncingIdentityEffect() {}
49 virtual std::string effect_type_id() const { return "IdentityEffect"; }
50 std::string output_fragment_shader() { return read_file("identity.frag"); }
51 bool needs_texture_bounce() const { return true; }
54 TEST(EffectChainTest, TextureBouncePreservesIdentity) {
60 EffectChainTester tester(data, 3, 2, COLORSPACE_sRGB, GAMMA_LINEAR);
61 tester.get_chain()->add_effect(new BouncingIdentityEffect());
62 tester.run(out_data, COLORSPACE_sRGB, GAMMA_LINEAR);
64 expect_equal(data, out_data, 3, 2);
67 TEST(MirrorTest, BasicTest) {
72 float expected_data[6] = {
77 EffectChainTester tester(data, 3, 2, COLORSPACE_sRGB, GAMMA_LINEAR);
78 tester.get_chain()->add_effect(new MirrorEffect());
79 tester.run(out_data, COLORSPACE_sRGB, GAMMA_LINEAR);
81 expect_equal(expected_data, out_data, 3, 2);