#include "colormanagement.glsl" #include "saturation.glsl" uniform sampler2D sampler; uniform vec4 modulation; varying vec2 texcoord0; void main() { vec4 tex = texture2D(sampler, texcoord0); tex = sourceEncodingToNitsInDestinationColorspace(tex); tex = adjustSaturation(tex); // to preserve perceptual contrast, apply the inversion in gamma 2.2 space tex = nitsToEncoding(tex, gamma22_EOTF, 0.0, destinationReferenceLuminance); tex.rgb /= max(0.001, tex.a); tex.rgb = vec3(1.0) - tex.rgb; tex *= modulation; tex.rgb *= tex.a; tex = encodingToNits(tex, gamma22_EOTF, 0.0, destinationReferenceLuminance); gl_FragColor = nitsToDestinationEncoding(tex); }