159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta#import "Common/ShaderLib/Hdr.glsllib" 259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 359b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartauniform sampler2D m_Texture; 459b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartavarying vec2 texCoord; 559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta#ifdef BLOCKS 759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta uniform vec2 m_PixelSize; 859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta uniform vec2 m_BlockSize; 959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta uniform float m_NumPixels; 1059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta#endif 1159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 1259b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartavec4 blocks(vec2 halfBlockSize, vec2 pixelSize, float numPixels){ 1359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta vec2 startUV = texCoord - halfBlockSize; 1459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta vec2 endUV = texCoord + halfBlockSize; 1559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 1659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta vec4 sum = vec4(0.0); 1759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta float numPix = 0.0; 1859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta //float maxLum = 0.0; 1959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 2059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta for (float x = startUV.x; x < endUV.x; x += pixelSize.x){ 2159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta for (float y = startUV.y; y < endUV.y; y += pixelSize.y){ 2259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta numPix += 1.0; 2359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta vec4 color = texture2D(m_Texture, vec2(x,y)); 2459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 2559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta #ifdef ENCODE_LUM 2659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta color = HDR_EncodeLum(HDR_GetLum(color.rgb)); 2759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta #endif 2859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta //#ifdef COMPUTE_MAX 2959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta //maxLum = max(color.r, maxLum); 3059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta //#endif 3159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta sum += color; 3259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 3359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 3459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta sum /= numPix; 3559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 3659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta #ifdef DECODE_LUM 3759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta sum = vec4(HDR_DecodeLum(sum)); 3859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta //#ifdef COMPUTE_MAX 3959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta //maxLum = HDR_GetExpLum(maxLum); 4059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta //#endif 4159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta #endif 4259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 4359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return sum; 4459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta} 4559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 4659b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartavec4 fetch(){ 4759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta vec4 color = texture2D(m_Texture, texCoord); 4859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta #ifdef ENCODE_LUM 4959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return HDR_EncodeLum(HDR_GetLum(color.rgb)); 5059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta #elif defined DECODE_LUM 5159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return vec4(HDR_DecodeLum(color)); 5259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta #else 5359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return color; 5459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta #endif 5559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta} 5659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 5759b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartavoid main() { 5859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta #ifdef BLOCKS 5959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta gl_FragColor = blocks(m_BlockSize * vec2(0.5), m_PixelSize, m_NumPixels); 6059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta #else 6159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta gl_FragColor = vec4(fetch()); 6259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta #endif 6359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta} 6459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 6559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 66