//高斯模糊在X轴和Y轴上各做一次。共需要两个pass
// 在X轴上的高斯模糊
#version 110
#extension GL_ARB_draw_buffers : enable
uniform sampler2D texSrc;
uniform int imgW;
void main()
{
float d = 1.0/float(imgW);
vec4 color = vec4(0.0,0.0,0.0,0.0);
color += texture2D(texSrc,gl_TexCoord[0].xy+vec2(-5.0*d,0.0))
* 0.1;
color += texture2D(texSrc,gl_TexCoord[0].xy+vec2(-4.0*d,0.0))
* 0.22;
color += texture2D(texSrc,gl_TexCoord[0].xy+vec2(-3.0*d,0.0))
* 0.358;
color += texture2D(texSrc,gl_TexCoord[0].xy+vec2(-2.0*d,0.0))
* 0.523;
color += texture2D(texSrc,gl_TexCoord[0].xy+vec2(-1.0*d,0.0))
* 0.843;
color += texture2D(texSrc,gl_TexCoord[0].xy ) * 1.0;
color += texture2D(texSrc,gl_TexCoord[0].xy+vec2( 1.0*d,0.0))
* 0.843;
color += texture2D(texSrc,gl_TexCoord[0].xy+vec2( 2.0*d,0.0))
* 0.523;
color += texture2D(texSrc,gl_TexCoord[0].xy+vec2( 3.0*d,0.0))
* 0.358;
color += texture2D(texSrc,gl_TexCoord[0].xy+vec2( 4.0*d,0.0))
* 0.22;
color += texture2D(texSrc,gl_TexCoord[0].xy+vec2( 5.0*d,0.0))
* 0.1;
color /= 5.0;
gl_FragData[0] = color;
}
//在Y轴上的高斯模糊。原理相同
#version 110
#extension GL_ARB_draw_buffers : enable
uniform sampler2D texSrc;
uniform int imgH;
void main()
{
float d = 1.0/float(imgH);
vec4 color = vec4(0.0,0.0,0.0,0.0);
color += texture2D(texSrc,gl_TexCoord[0].xy+vec2(0.0,-5.0*d)) * 0.1;
color += texture2D(texSrc,gl_TexCoord[0].xy+vec2(0.0,-4.0*d)) * 0.22;
color += texture2D(texSrc,gl_TexCoord[0].xy+vec2(0.0,-3.0*d)) * 0.358;
color += texture2D(texSrc,gl_TexCoord[0].xy+vec2(0.0,-2.0*d)) * 0.563;
color += texture2D(texSrc,gl_TexCoord[0].xy+vec2(0.0,-1.0*d)) * 0.873;
color += texture2D(texSrc,gl_TexCoord[0].xy ) * 1.0;
color += texture2D(texSrc,gl_TexCoord[0].xy+vec2(0.0, 1.0*d)) * 0.873;
color += texture2D(texSrc,gl_TexCoord[0].xy+vec2(0.0, 2.0*d)) * 0.563;
color += texture2D(texSrc,gl_TexCoord[0].xy+vec2(0.0, 3.0*d)) * 0.358;
color += texture2D(texSrc,gl_TexCoord[0].xy+vec2(0.0, 4.0*d)) * 0.22;
color += texture2D(texSrc,gl_TexCoord[0].xy+vec2(0.0, 5.0*d)) * 0.1;
color /= 5.0;
gl_FragData[0] = color;
}