1+ #ifdef GL_ES
2+ precision mediump float ;
3+ precision mediump int ;
4+ #endif
5+
6+ #define PROCESSING_TEXTURE_SHADER
7+
8+ uniform sampler2D texture;
9+
10+ varying vec4 vertColor;
11+ varying vec4 vertTexCoord;
12+
13+ vec3 n;
14+
15+ uniform float gamma = 2.2 ;
16+
17+ vec3 linearToneMapping(vec3 color)
18+ {
19+ float exposure = 1 .;
20+ color = clamp (exposure * color, 0 ., 1 .);
21+ color = pow (color, vec3 (1 . / gamma));
22+ return color;
23+ }
24+
25+ vec3 simpleReinhardToneMapping(vec3 color)
26+ {
27+ float exposure = 1.5 ;
28+ color *= exposure/ (1 . + color / exposure);
29+ color = pow (color, vec3 (1 . / gamma));
30+ return color;
31+ }
32+
33+ vec3 lumaBasedReinhardToneMapping(vec3 color)
34+ {
35+ float luma = dot (color, vec3 (0.2126 , 0.7152 , 0.0722 ));
36+ float toneMappedLuma = luma / (1 . + luma);
37+ color *= toneMappedLuma / luma;
38+ color = pow (color, vec3 (1 . / gamma));
39+ return color;
40+ }
41+
42+ vec3 whitePreservingLumaBasedReinhardToneMapping(vec3 color)
43+ {
44+ float white = 2 .;
45+ float luma = dot (color, vec3 (0.2126 , 0.7152 , 0.0722 ));
46+ float toneMappedLuma = luma * (1 . + luma / (white* white)) / (1 . + luma);
47+ color *= toneMappedLuma / luma;
48+ color = pow (color, vec3 (1 . / gamma));
49+ return color;
50+ }
51+
52+ vec3 RomBinDaHouseToneMapping(vec3 color)
53+ {
54+ color = exp ( - 1.0 / ( 2.72 * color + 0.15 ) );
55+ color = pow (color, vec3 (1 . / gamma));
56+ return color;
57+ }
58+
59+ vec3 filmicToneMapping(vec3 color)
60+ {
61+ color = max (vec3 (0 .), color - vec3 (0.004 ));
62+ color = (color * (6.2 * color + .5 )) / (color * (6.2 * color + 1.7 ) + 0.06 );
63+ return color;
64+ }
65+
66+ vec3 Uncharted2ToneMapping(vec3 color)
67+ {
68+ float A = 0.15 ;
69+ float B = 0.50 ;
70+ float C = 0.10 ;
71+ float D = 0.20 ;
72+ float E = 0.02 ;
73+ float F = 0.30 ;
74+ float W = 11.2 ;
75+ float exposure = 2 .;
76+ color *= exposure;
77+ color = ((color * (A * color + C * B) + D * E) / (color * (A * color + B) + D * F)) - E / F;
78+ float white = ((W * (A * W + C * B) + D * E) / (W * (A * W + B) + D * F)) - E / F;
79+ color /= white;
80+ color = pow (color, vec3 (1 . / gamma));
81+ return color;
82+ }
83+
84+ void main() {
85+ vec4 c = texture2D (texture, vertTexCoord.st) * vertColor;
86+ vec3 n = linearToneMapping(c.rgb);
87+ gl_FragColor = vec4 (n, c.a);
88+ }
0 commit comments