X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=lift_gamma_gain_effect.frag;h=9047d64bbc2230c263e6fb5a6025642435cf8cd0;hp=43766a6265218621888cbf7a11ffe862ddb0fbba;hb=18fdebc534adc6b7a4c36b290b01d598bcb671bc;hpb=e8650c7b7814c5beef59059b8acac3e5e7b8ddc6 diff --git a/lift_gamma_gain_effect.frag b/lift_gamma_gain_effect.frag index 43766a6..9047d64 100644 --- a/lift_gamma_gain_effect.frag +++ b/lift_gamma_gain_effect.frag @@ -3,12 +3,18 @@ uniform vec3 PREFIX(gain_pow_inv_gamma); // gain^(1/gamma). uniform vec3 PREFIX(inv_gamma_22); // 2.2 / gamma. vec4 FUNCNAME(vec2 tc) { - vec4 x = LAST_INPUT(tc); + vec4 x = INPUT(tc); + + x.rgb /= x.aaa; + + // pow() of negative numbers is undefined, so clip out-of-gamut values. + x.rgb = max(x.rgb, 0.0); 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); + x.rgb *= x.aaa; return x; }