+++ /dev/null
-import postprocess;
-
-uniform sampler1D curve;
-uniform ToneMapping
-{
- float peak;
- float brightness;
-};
-
-////// fragment
-void main()
-{
- vec4 sample = texture(source, texcoord);
- float maxc = max(sample.r, max(sample.g, sample.b));
- if(maxc>1.0-peak)
- {
- vec3 saturated = sample.rgb/maxc;
- if(maxc>1.0+peak)
- {
- sample.rgb = mix(vec3(1.0), saturated, 1.0/pow(brightness, maxc-1.0-peak));
- }
- else
- {
- float x = (1.0+peak-maxc)/(2.0*peak);
- sample.rgb = saturated.rgb*(1.0-peak+(1.0-x*x)*peak);
- }
- }
- frag_color = vec4(texture(curve, sample.r).r, texture(curve, sample.g).r, texture(curve, sample.b).r, sample.a);
-}