X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=gamma_expansion_effect.frag;h=b8e3581f53772107880d9b90b68981a95e9f35d9;hp=1174a3e85cc85f20defcae93812df1da555e3ca4;hb=refs%2Fheads%2F1.3.x-release;hpb=6eb839737216564bcaf4645b7ebf6ea9efc2da09 diff --git a/gamma_expansion_effect.frag b/gamma_expansion_effect.frag index 1174a3e..b8e3581 100644 --- a/gamma_expansion_effect.frag +++ b/gamma_expansion_effect.frag @@ -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; }