X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=gamma_compression_effect_rec709.frag;fp=gamma_compression_effect_rec709.frag;h=807cd4995c0796d800d51eeae8628be6106450d2;hb=d4542f76df5d26843c68b1467e76722cffd801a1;hp=0000000000000000000000000000000000000000;hpb=873b60b640a96c8fb4c2d8c88c85d20e0a2dca6b;p=movit diff --git a/gamma_compression_effect_rec709.frag b/gamma_compression_effect_rec709.frag new file mode 100644 index 0000000..807cd49 --- /dev/null +++ b/gamma_compression_effect_rec709.frag @@ -0,0 +1,31 @@ +// Compress to Rec. 601/Rec. 709 gamma curve. + +#if 0 + +// if we have the lut +uniform sampler1D PREFIX(rec709_inverse_tex); + +vec4 FUNCNAME(vec2 tc) { + vec4 x = LAST_INPUT(tc); + + x.r = texture1D(PREFIX(rec709_inverse_tex), x.r).x; + x.g = texture1D(PREFIX(rec709_inverse_tex), x.g).x; + x.b = texture1D(PREFIX(rec709_inverse_tex), x.b).x; + + return x; +} + +#else + +// use arithmetic (slow) +vec4 FUNCNAME(vec2 tc) { + vec4 x = LAST_INPUT(tc); + + vec3 a = vec3(4.5) * x.rgb; + vec3 b = vec3(1.099) * pow(x.rgb, vec3(0.45)) - vec3(0.099); + vec3 f = vec3(greaterThan(x.rgb, vec3(0.018))); + + return vec4(mix(a, b, f), x.a); +} + +#endif