#define current texture0 #define previous texture1 uniform sampler2D current; uniform sampler2D previous; uniform vec2 texelSize0; uniform mediump float bloomRadius; #ifdef GL_ES varying mediump vec2 varTexCoord; #else centroid varying vec2 varTexCoord; #endif void main(void) { vec2 offset = bloomRadius * texelSize0; vec3 a = texture2D(previous, varTexCoord.st + vec2(-1., -1.) * offset).rgb; vec3 b = texture2D(previous, varTexCoord.st + vec2(0., -1.) * offset).rgb; vec3 c = texture2D(previous, varTexCoord.st + vec2(1., -1.) * offset).rgb; vec3 d = texture2D(previous, varTexCoord.st + vec2(-1., 0.) * offset).rgb; vec3 e = texture2D(previous, varTexCoord.st + vec2(0., 0.) * offset).rgb; vec3 f = texture2D(previous, varTexCoord.st + vec2(1., 0.) * offset).rgb; vec3 g = texture2D(previous, varTexCoord.st + vec2(-1., 1.) * offset).rgb; vec3 h = texture2D(previous, varTexCoord.st + vec2(0., 1.) * offset).rgb; vec3 i = texture2D(previous, varTexCoord.st + vec2(1., 1.) * offset).rgb; vec3 base = texture2D(current, varTexCoord.st).rgb; gl_FragColor = max(vec4(base + (a + c + g + i) * 0.0625 + (b + d + f + h) * 0.125 + e * 0.25, 1.), 1e-4); }