/* Generic 2D box blur fragment shader for 2D rectangle textures.
// OpenGL program has to setup the texture unit 'FilterMap' with a lookup
// table texture for the per-outputpixel location boxfilter half-width and bind
// texture unit 'Image' with the image to be box-filtered. Texture filtering
// mode needs to be GL_NEAREST for defined results!
//
// (w)2007 by Mario Kleiner. Licensed under MIT license.
*/

#extension GL_ARB_texture_rectangle : enable

uniform sampler2DRect Image;
uniform vec4 Roi;
uniform float RadiusSquared;
uniform float HalfWidth; 

void main()
{
    float dx, dy, indisk;
    float sum = 0.0;
    float sample;

    if (gl_TexCoord[0].x < Roi.x || gl_TexCoord[0].y < Roi.y || gl_TexCoord[0].x > Roi.z || gl_TexCoord[0].y > Roi.w) discard;

    for (dy = -HalfWidth; dy <= HalfWidth; dy++) {
      for (dx = -HalfWidth; dx <= HalfWidth; dx++) {
        sample = texture2DRect(Image, gl_TexCoord[0].xy + vec2(dx, dy)).a;
        indisk = (2.0 * step((dx * dx + dy * dy), RadiusSquared)) - 1.0;

        sum += sample * indisk;
      }
    }

    gl_FragColor.rg  = gl_TexCoord[0].xy;
    gl_FragColor.ba  = vec2(sum);
}

