3 // These are calculated in the host code to save some arithmetic.
4 // uniform vec3 PREFIX(gain_pow_inv_gamma); // gain^(1/gamma).
5 // uniform vec3 PREFIX(inv_gamma_22); // 2.2 / gamma.
7 vec4 FUNCNAME(vec2 tc) {
12 // pow() of negative numbers is undefined, so clip out-of-gamut values.
13 x.rgb = max(x.rgb, 0.0);
15 x.rgb = pow(x.rgb, vec3(1.0/2.2));
16 x.rgb += PREFIX(lift) * (vec3(1) - x.rgb);
18 // Clip out-of-gamut values again.
19 x.rgb = max(x.rgb, 0.0);
21 x.rgb = pow(x.rgb, PREFIX(inv_gamma_22));
22 x.rgb *= PREFIX(gain_pow_inv_gamma);