]> git.sesse.net Git - movit/blobdiff - gamma_expansion_effect.cpp
Rework uniform setting.
[movit] / gamma_expansion_effect.cpp
index 95437906f4c63134232e7775ba630016b2b6748f..15e0bffb8f03ed0a1bf034c29b9fbbcd6245be38 100644 (file)
@@ -12,6 +12,13 @@ GammaExpansionEffect::GammaExpansionEffect()
        : source_curve(GAMMA_LINEAR)
 {
        register_int("source_curve", (int *)&source_curve);
+       register_uniform_float("linear_scale", &uniform_linear_scale);
+       register_uniform_float("c0", &uniform_c0);
+       register_uniform_float("c1", &uniform_c1);
+       register_uniform_float("c2", &uniform_c2);
+       register_uniform_float("c3", &uniform_c3);
+       register_uniform_float("c4", &uniform_c4);
+       register_uniform_float("beta", &uniform_beta);
 }
 
 string GammaExpansionEffect::output_fragment_shader()
@@ -80,13 +87,13 @@ void GammaExpansionEffect::set_gl_state(GLuint glsl_program_num, const string &p
                //
                // Note that the worst _relative_ error by far is just at the beginning
                // of the exponential curve, ie., just around β.
-               set_uniform_float(glsl_program_num, prefix, "linear_scale", 1.0 / 12.92);
-               set_uniform_float(glsl_program_num, prefix, "c0", 0.001324469581);
-               set_uniform_float(glsl_program_num, prefix, "c1", 0.02227416690);
-               set_uniform_float(glsl_program_num, prefix, "c2", 0.5917615253);
-               set_uniform_float(glsl_program_num, prefix, "c3", 0.4733532353);
-               set_uniform_float(glsl_program_num, prefix, "c4", -0.08880738120);
-               set_uniform_float(glsl_program_num, prefix, "beta", 0.04045);
+               uniform_linear_scale = 1.0 / 12.92;
+               uniform_c0 = 0.001324469581;
+               uniform_c1 = 0.02227416690;
+               uniform_c2 = 0.5917615253;
+               uniform_c3 = 0.4733532353;
+               uniform_c4 = -0.08880738120;
+               uniform_beta = 0.04045;
        }
        if (source_curve == GAMMA_REC_709) {  // Also includes Rec. 601, and 10-bit Rec. 2020.
                // Rec. 2020, page 3; ɑ = 1.099, β = 0.018 * 4.5, ɣ = 1/0.45.
@@ -97,13 +104,13 @@ void GammaExpansionEffect::set_gl_state(GLuint glsl_program_num, const string &p
                // Note that Rec. 2020 only gives the other direction, which is why
                // our beta and gamma are different from the numbers mentioned
                // (we've inverted the formula).
-               set_uniform_float(glsl_program_num, prefix, "linear_scale", 1.0 / 4.5);
-               set_uniform_float(glsl_program_num, prefix, "c0", 0.005137028744);
-               set_uniform_float(glsl_program_num, prefix, "c1", 0.09802596889);
-               set_uniform_float(glsl_program_num, prefix, "c2", 0.7255768864);
-               set_uniform_float(glsl_program_num, prefix, "c3", 0.2135067966);
-               set_uniform_float(glsl_program_num, prefix, "c4", -0.04225094667);
-               set_uniform_float(glsl_program_num, prefix, "beta", 0.018 * 4.5);
+               uniform_linear_scale = 1.0 / 4.5;
+               uniform_c0 = 0.005137028744;
+               uniform_c1 = 0.09802596889;
+               uniform_c2 = 0.7255768864;
+               uniform_c3 = 0.2135067966;
+               uniform_c4 = -0.04225094667;
+               uniform_beta = 0.018 * 4.5;
        }
        if (source_curve == GAMMA_REC_2020_12_BIT) {
                // Rec. 2020, page 3; ɑ = 1.0993, β = 0.0181 * 4.5, ɣ = 1/0.45.
@@ -114,13 +121,13 @@ void GammaExpansionEffect::set_gl_state(GLuint glsl_program_num, const string &p
                // Note that Rec. 2020 only gives the other direction, which is why
                // our beta and gamma are different from the numbers mentioned
                // (we've inverted the formula).
-               set_uniform_float(glsl_program_num, prefix, "linear_scale", 1.0 / 4.5);
-               set_uniform_float(glsl_program_num, prefix, "c0", 0.005167545928);
-               set_uniform_float(glsl_program_num, prefix, "c1", 0.09835585809);
-               set_uniform_float(glsl_program_num, prefix, "c2", 0.7254820139);
-               set_uniform_float(glsl_program_num, prefix, "c3", 0.2131291155);
-               set_uniform_float(glsl_program_num, prefix, "c4", -0.04213877222);
-               set_uniform_float(glsl_program_num, prefix, "beta", 0.0181 * 4.5);
+               uniform_linear_scale = 1.0 / 4.5;
+               uniform_c0 = 0.005167545928;
+               uniform_c1 = 0.09835585809;
+               uniform_c2 = 0.7254820139;
+               uniform_c3 = 0.2131291155;
+               uniform_c4 = -0.04213877222;
+               uniform_beta = 0.0181 * 4.5;
        }
 }