| [5312] | 1 | uniform sampler2D inRTT; | 
|---|
 | 2 | uniform sampler2D inLum; | 
|---|
 | 3 | uniform vec2 texelSize; | 
|---|
 | 4 |  | 
|---|
 | 5 | varying vec2 uv; | 
|---|
 | 6 | const vec4 BRIGHT_LIMITER = vec4(0.6, 0.6, 0.6, 0.0); | 
|---|
 | 7 |  | 
|---|
 | 8 | // declare external function | 
|---|
 | 9 | vec4 toneMap(in vec4 inColour, in float lum); | 
|---|
 | 10 |  | 
|---|
 | 11 | void main(void) | 
|---|
 | 12 | { | 
|---|
 | 13 |     vec4 accum = vec4(0.0, 0.0, 0.0, 0.0); | 
|---|
 | 14 |  | 
|---|
 | 15 |     accum += texture2D(inRTT, uv + texelSize * vec2(-1.0, -1.0)); | 
|---|
 | 16 |     accum += texture2D(inRTT, uv + texelSize * vec2( 0.0, -1.0)); | 
|---|
 | 17 |     accum += texture2D(inRTT, uv + texelSize * vec2( 1.0, -1.0)); | 
|---|
 | 18 |     accum += texture2D(inRTT, uv + texelSize * vec2(-1.0,  0.0)); | 
|---|
 | 19 |     accum += texture2D(inRTT, uv + texelSize * vec2( 0.0,  0.0)); | 
|---|
 | 20 |     accum += texture2D(inRTT, uv + texelSize * vec2( 1.0,  0.0)); | 
|---|
 | 21 |     accum += texture2D(inRTT, uv + texelSize * vec2(-1.0,  1.0)); | 
|---|
 | 22 |     accum += texture2D(inRTT, uv + texelSize * vec2( 0.0,  1.0)); | 
|---|
 | 23 |     accum += texture2D(inRTT, uv + texelSize * vec2( 1.0,  1.0)); | 
|---|
 | 24 |      | 
|---|
 | 25 |         // take average of 9 samples | 
|---|
 | 26 |         accum *= 0.1111111111111111; | 
|---|
 | 27 |  | 
|---|
 | 28 |     // Reduce bright and clamp | 
|---|
 | 29 |     accum = max(vec4(0.0, 0.0, 0.0, 1.0), accum - BRIGHT_LIMITER); | 
|---|
 | 30 |  | 
|---|
 | 31 |         // Sample the luminence texture | 
|---|
 | 32 |         vec4 lum = texture2D(inLum, vec2(0.5, 0.5)); | 
|---|
 | 33 |          | 
|---|
 | 34 |         // Tone map result | 
|---|
 | 35 |         gl_FragColor = toneMap(accum, lum.r); | 
|---|
 | 36 |  | 
|---|
 | 37 | } | 
|---|