https://bugs.freedesktop.org/show_bug.cgi?id=30007
--- Comment #24 from Tom Stellard tstellar@gmail.com 2010-09-12 19:46:10 PDT ---
uniform sampler2D texUnit; uniform vec2 offsets[25]; uniform vec4 kernel[25]; uniform int kernelSize;
void main(void) { vec4 sum = texture2D(texUnit, gl_TexCoord[0].st) * kernel[0]; for (int i = 1; i < 25; i++) {
sum += texture2D(texUnit, gl_TexCoord[0].st - offsets[i]) * kernel[i]; sum += texture2D(texUnit, gl_TexCoord[0].st + offsets[i]) * kernel[i]; } gl_FragColor = sum; }
Oops, I submitted before I was done. This shader would be better, because the loop could be unrolled even if kernelSize is different in each execution:
uniform sampler2D texUnit; uniform vec2 offsets[25]; uniform vec4 kernel[25]; uniform int kernelSize;
void main(void) { vec4 sum = texture2D(texUnit, gl_TexCoord[0].st) * kernel[0]; for (int i = 1; i < 25; i++) { if ( i < kernelSize) { sum += texture2D(texUnit, gl_TexCoord[0].st - offsets[i]) * kernel[i]; sum += texture2D(texUnit, gl_TexCoord[0].st + offsets[i]) * kernel[i]; } } gl_FragColor = sum; }