From: Steinar H. Gunderson Date: Mon, 1 Oct 2012 17:23:38 +0000 (+0200) Subject: Add lift/gamma/gain GLSL code. Completely black output, due to lack of uniform setting. X-Git-Tag: 1.0~466 X-Git-Url: https://git.sesse.net/?p=movit;a=commitdiff_plain;h=dc8b571877bef7ad65064dc05a1aeda5dba16ee6 Add lift/gamma/gain GLSL code. Completely black output, due to lack of uniform setting. --- diff --git a/lift_gamma_gain_effect.cpp b/lift_gamma_gain_effect.cpp index eef04d5..149cb44 100644 --- a/lift_gamma_gain_effect.cpp +++ b/lift_gamma_gain_effect.cpp @@ -15,5 +15,5 @@ LiftGammaGainEffect::LiftGammaGainEffect() std::string LiftGammaGainEffect::output_glsl() { - return read_file("todo.glsl"); + return read_file("lift_gamma_gain_effect.glsl"); } diff --git a/lift_gamma_gain_effect.glsl b/lift_gamma_gain_effect.glsl new file mode 100644 index 0000000..17437fb --- /dev/null +++ b/lift_gamma_gain_effect.glsl @@ -0,0 +1,21 @@ +// Standard lift/gamma/gain color correction tools. +// +// We do lift in a nonlinear (gamma-2.2) space since that looks a lot better +// than in linear (blacks stay a lot closer to black). The two others don't +// really care; they are (sans some constants) commutative with the x^2.2 +// operation. + +// These are calculated in the host code to save some arithmetic. +uniform vec3 PREFIX(gain_pow_inv_gamma), PREFIX(inv_gamma_22); + +vec4 FUNCNAME(vec2 tc) { + vec4 x = LAST_INPUT(tc); + + // do lift in nonlinear space (the others don't care) + x.rgb = pow(x.rgb, vec3(1.0/2.2)); + x.rgb += PREFIX(lift) * (vec3(1) - x.rgb); + x.rgb = pow(x.rgb, PREFIX(inv_gamma_22)); + x.rgb *= PREFIX(gain_pow_inv_gamma); + + return x; +}