/* 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); }