]> git.sesse.net Git - movit/blobdiff - gamma_expansion_effect.frag
Release Movit 1.3.2. (From a branch, since I do not want to break ABI compatibility...
[movit] / gamma_expansion_effect.frag
index 1174a3e85cc85f20defcae93812df1da555e3ca4..b8e3581f53772107880d9b90b68981a95e9f35d9 100644 (file)
@@ -1,11 +1,20 @@
-// Expand sRGB gamma curve.
+// Expand gamma curve.
+
+// Implicit uniforms:
+// uniform float PREFIX(linear_scale);
+// uniform float PREFIX(c)[5];
+// uniform float PREFIX(beta);
 
 vec4 FUNCNAME(vec2 tc) {
        vec4 x = INPUT(tc);
 
-       x.r = texture1D(PREFIX(expansion_curve_tex), x.r).x;
-       x.g = texture1D(PREFIX(expansion_curve_tex), x.g).x;
-       x.b = texture1D(PREFIX(expansion_curve_tex), x.b).x;
+       vec3 a = x.rgb * PREFIX(linear_scale);
+
+       // Fourth-order polynomial approximation to pow(). See the .cpp file for details.
+       vec3 b = PREFIX(c[0]) + (PREFIX(c[1]) + (PREFIX(c[2]) + (PREFIX(c[3]) + PREFIX(c[4]) * x.rgb) * x.rgb) * x.rgb) * x.rgb;
+
+       vec3 f = vec3(greaterThan(x.rgb, vec3(PREFIX(beta))));
+       x = vec4(mix(a, b, f), x.a);
 
        return x;
 }