#import "Common/ShaderLib/Hdr.glsllib" | |
uniform sampler2D m_Texture; | |
varying vec2 texCoord; | |
#ifdef BLOCKS | |
uniform vec2 m_PixelSize; | |
uniform vec2 m_BlockSize; | |
uniform float m_NumPixels; | |
#endif | |
vec4 blocks(vec2 halfBlockSize, vec2 pixelSize, float numPixels){ | |
vec2 startUV = texCoord - halfBlockSize; | |
vec2 endUV = texCoord + halfBlockSize; | |
vec4 sum = vec4(0.0); | |
float numPix = 0.0; | |
//float maxLum = 0.0; | |
for (float x = startUV.x; x < endUV.x; x += pixelSize.x){ | |
for (float y = startUV.y; y < endUV.y; y += pixelSize.y){ | |
numPix += 1.0; | |
vec4 color = texture2D(m_Texture, vec2(x,y)); | |
#ifdef ENCODE_LUM | |
color = HDR_EncodeLum(HDR_GetLum(color.rgb)); | |
#endif | |
//#ifdef COMPUTE_MAX | |
//maxLum = max(color.r, maxLum); | |
//#endif | |
sum += color; | |
} | |
} | |
sum /= numPix; | |
#ifdef DECODE_LUM | |
sum = vec4(HDR_DecodeLum(sum)); | |
//#ifdef COMPUTE_MAX | |
//maxLum = HDR_GetExpLum(maxLum); | |
//#endif | |
#endif | |
return sum; | |
} | |
vec4 fetch(){ | |
vec4 color = texture2D(m_Texture, texCoord); | |
#ifdef ENCODE_LUM | |
return HDR_EncodeLum(HDR_GetLum(color.rgb)); | |
#elif defined DECODE_LUM | |
return vec4(HDR_DecodeLum(color)); | |
#else | |
return color; | |
#endif | |
} | |
void main() { | |
#ifdef BLOCKS | |
gl_FragColor = blocks(m_BlockSize * vec2(0.5), m_PixelSize, m_NumPixels); | |
#else | |
gl_FragColor = vec4(fetch()); | |
#endif | |
} | |