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