]> git.sesse.net Git - movit/blob - lift_gamma_gain_effect.cpp
Move saturation out into its own effect, and hook up the control.
[movit] / lift_gamma_gain_effect.cpp
1 #define GL_GLEXT_PROTOTYPES 1
2
3 #include <math.h>
4 #include <GL/gl.h>
5 #include <GL/glext.h>
6
7 #include "lift_gamma_gain_effect.h"
8 #include "util.h"
9
10 LiftGammaGainEffect::LiftGammaGainEffect()
11         : lift(0.0f, 0.0f, 0.0f),
12           gamma(1.0f, 1.0f, 1.0f),
13           gain(1.0f, 1.0f, 1.0f)
14 {
15         register_vec3("lift", (float *)&lift);
16         register_vec3("gamma", (float *)&gamma);
17         register_vec3("gain", (float *)&gain);
18 }
19
20 std::string LiftGammaGainEffect::output_glsl()
21 {
22         return read_file("lift_gamma_gain_effect.glsl");
23 }
24
25 void LiftGammaGainEffect::set_uniforms(GLhandleARB glsl_program_num, const std::string &prefix)
26 {
27         Effect::set_uniforms(glsl_program_num, prefix);
28
29         RGBTriplet gain_pow_inv_gamma(
30                 pow(gain.r, 1.0f / gamma.r),
31                 pow(gain.g, 1.0f / gamma.g),
32                 pow(gain.b, 1.0f / gamma.b));
33         set_uniform_vec3(glsl_program_num, prefix, "gain_pow_inv_gamma", (float *)&gain_pow_inv_gamma);
34
35         RGBTriplet inv_gamma_22(
36                 2.2f / gamma.r,
37                 2.2f / gamma.g,
38                 2.2f / gamma.b);
39         set_uniform_vec3(glsl_program_num, prefix, "inv_gamma_22", (float *)&inv_gamma_22);
40 }