别看很多,其实顶点着色器的内容都是一样的。即所有vsh文件的内容都是:
然后我们编写 composite1.fsh,该片段着色器主要做两件事:
1. 对 1 号缓冲区的图像进行一次横向的模糊并将结果写入 1 号缓冲区
2. 将 0 号缓冲区的原图继续传递(写)下去
其中模糊的代码和上一篇博客中的代码几乎无异,只是区分了横向和纵向。我们做一次半径为15的横向
模糊
然后我们编写 composite2.fsh ,这和composite1.fsh几乎相同:
#version 120
uniform sampler2D colortex0;
uniform sampler2D colortex1;
uniform float viewWidth;
uniform float viewHeight;
varying vec4 texcoord;
/* DRAWBUFFERS: 01 */
void main() {
// 传递基色
vec4 color = texture2D(colortex0, texcoord.st);
gl_FragData[0] = color;
// 横向模糊
int radius = 15;
vec3 sum = texture2D(colortex1, texcoord.st).rgb;
for(int i=1; i<radius; i++) {
vec2 offset = vec2(i/viewWidth, 0);
sum += texture2D(colortex1, texcoord.st+offset).rgb;
sum += texture2D(colortex1, texcoord.st-offset).rgb;
}
sum /= (2*radius+1);
gl_FragData[1] = vec4(sum, 1.0);
}