// circular blur, alpha-controlled #vertex void main() { gl_TexCoord[0] = gl_MultiTexCoord0; gl_Position = ftransform(); } #fragment uniform sampler2D tex; uniform vec2 rmax; const vec2 v1 = vec2( 0.988, 0.156); const vec2 v2 = vec2( 0.588, 0.809); const vec2 v3 = vec2(-0.156, 0.988); const vec2 v4 = vec2(-0.809, 0.588); void main() { vec2 t = gl_TexCoord[0].xy; vec2 r = rmax * texture2D(tex, t).a; gl_FragColor = 0.125 * ( texture2D(tex, t + r * v1) + texture2D(tex, t - r * v1) + texture2D(tex, t + r * v2) + texture2D(tex, t - r * v2) + texture2D(tex, t + r * v3) + texture2D(tex, t - r * v3) + texture2D(tex, t + r * v4) + texture2D(tex, t - r * v4)); }