1#import "Common/ShaderLib/Hdr.glsllib" 2 3uniform sampler2D m_Texture; 4varying vec2 texCoord; 5 6#ifdef BLOCKS 7 uniform vec2 m_PixelSize; 8 uniform vec2 m_BlockSize; 9 uniform float m_NumPixels; 10#endif 11 12vec4 blocks(vec2 halfBlockSize, vec2 pixelSize, float numPixels){ 13 vec2 startUV = texCoord - halfBlockSize; 14 vec2 endUV = texCoord + halfBlockSize; 15 16 vec4 sum = vec4(0.0); 17 float numPix = 0.0; 18 //float maxLum = 0.0; 19 20 for (float x = startUV.x; x < endUV.x; x += pixelSize.x){ 21 for (float y = startUV.y; y < endUV.y; y += pixelSize.y){ 22 numPix += 1.0; 23 vec4 color = texture2D(m_Texture, vec2(x,y)); 24 25 #ifdef ENCODE_LUM 26 color = HDR_EncodeLum(HDR_GetLum(color.rgb)); 27 #endif 28 //#ifdef COMPUTE_MAX 29 //maxLum = max(color.r, maxLum); 30 //#endif 31 sum += color; 32 } 33 } 34 sum /= numPix; 35 36 #ifdef DECODE_LUM 37 sum = vec4(HDR_DecodeLum(sum)); 38 //#ifdef COMPUTE_MAX 39 //maxLum = HDR_GetExpLum(maxLum); 40 //#endif 41 #endif 42 43 return sum; 44} 45 46vec4 fetch(){ 47 vec4 color = texture2D(m_Texture, texCoord); 48 #ifdef ENCODE_LUM 49 return HDR_EncodeLum(HDR_GetLum(color.rgb)); 50 #elif defined DECODE_LUM 51 return vec4(HDR_DecodeLum(color)); 52 #else 53 return color; 54 #endif 55} 56 57void main() { 58 #ifdef BLOCKS 59 gl_FragColor = blocks(m_BlockSize * vec2(0.5), m_PixelSize, m_NumPixels); 60 #else 61 gl_FragColor = vec4(fetch()); 62 #endif 63} 64 65 66