define KERNEL_SIZE 9
uniform int pixelSize; uniform sampler2D tex; uniform int width; uniform int height;
vec2 texCoords;
void main(void) {
vec4 avgColor; vec2 texCoordsStep = 1.0/(vec2(float(width),float(height))/float(pixelSize)); vec2 pixelBin = floor(gl_TexCoord[0].st/texCoordsStep); vec2 inPixelStep = texCoordsStep/3.0; vec2 inPixelHalfStep = inPixelStep/2.0; texCoords[0] = vec2(inPixelHalfStep.x, inPixelStep.y*2.0 + inPixelHalfStep.y) + pixelBin * texCoordsStep; texCoords[1] = vec2(inPixelStep.x + inPixelHalfStep.x, inPixelStep.y*2.0 + inPixelHalfStep.y) + pixelBin * texCoordsStep; texCoords[2] = vec2(inPixelStep.x*2.0 + inPixelHalfStep.x, inPixelStep.y*2.0 + inPixelHalfStep.y) + pixelBin * texCoordsStep; texCoords[3] = vec2(inPixelHalfStep.x, inPixelStep.y + inPixelHalfStep.y) + pixelBin * texCoordsStep; texCoords[4] = vec2(inPixelStep.x + inPixelHalfStep.x, inPixelStep.y + inPixelHalfStep.y) + pixelBin * texCoordsStep; texCoords[5] = vec2(inPixelStep.x*2.0 + inPixelHalfStep.x, inPixelStep.y + inPixelHalfStep.y) + pixelBin * texCoordsStep; texCoords[6] = vec2(inPixelHalfStep.x, inPixelHalfStep.y) + pixelBin * texCoordsStep; texCoords[7] = vec2(inPixelStep.x + inPixelHalfStep.x, inPixelHalfStep.y) + pixelBin * texCoordsStep; texCoords[8] = vec2(inPixelStep.x*2.0 + inPixelHalfStep.x, inPixelHalfStep.y) + pixelBin * texCoordsStep; avgColor = texture2D(tex, texCoords[0]) + texture2D(tex, texCoords[1]) + texture2D(tex, texCoords[2]) + texture2D(tex, texCoords[3]) + texture2D(tex, texCoords[4]) + texture2D(tex, texCoords[5]) + texture2D(tex, texCoords[6]) + texture2D(tex, texCoords[7]) + texture2D(tex, texCoords[8]); avgColor /= float(KERNEL_SIZE); gl_FragColor = avgColor;
}