import postprocess; uniform sampler1D curve; uniform ToneMapping { float exposure; vec3 brightness_response; }; #pragma MSP stage(fragment) void main() { vec4 incoming = texture(source, texcoord); float maxc = max(incoming.r, max(incoming.g, incoming.b)); if(maxc>0.0) { vec3 saturated = incoming.rgb/maxc; maxc = pow(maxc*exposure+brightness_response.y, brightness_response.x)-brightness_response.z; float c = min(maxc, 1.0); float minc = min(saturated.r, min(saturated.g, saturated.b)); incoming.rgb = mix(saturated, vec3(1.0), min((maxc-c)/(1.0-minc), 1.0))*c; } frag_color = vec4(texture(curve, incoming.r).r, texture(curve, incoming.g).r, texture(curve, incoming.b).r, incoming.a); }