#version 150 uniform sampler2D t0, ts, tg1; uniform float radius = 2; uniform vec2 dt; vec4 getTexel(vec2 tc, vec4 fp, vec4 fps) { vec4 ct = max(texture(t0, tc), vec4(0)), st = max(texture(ts, tc), vec4(0)); ct = mix(ct, fp, step(1, abs(fps.w - ct.w))); return ct; } void main(void) { ivec2 itc = ivec2(gl_FragCoord.xy); vec4 vg1 = texelFetch(tg1, itc, 0); vec2 tc = qgl_FragTexture.xy; float o = radius, o2 = radius * 2; vec4 fps = max(texture(ts, tc), vec4(0)); vec4 fp = max(texture(t0, tc), vec4(0)); vec4 scol = (fp * 3. + getTexel(tc + dt * vec2( o, 0 ), fp, fps) * 2. + getTexel(tc + dt * vec2( 0, o ), fp, fps) * 2. + getTexel(tc + dt * vec2( -o, 0 ), fp, fps) * 2. + getTexel(tc + dt * vec2( 0, -o), fp, fps) * 2. + getTexel(tc + dt * vec2( o, o ), fp, fps) * 1.5 + getTexel(tc + dt * vec2( o, -o), fp, fps) * 1.5 + getTexel(tc + dt * vec2( -o, -o ), fp, fps) * 1.5 + getTexel(tc + dt * vec2( -o, o ), fp, fps) * 1.5 + getTexel(tc + dt * vec2( o2, 0 ), fp, fps) + getTexel(tc + dt * vec2( 0, o2), fp, fps) + getTexel(tc + dt * vec2(-o2, 0 ), fp, fps) + getTexel(tc + dt * vec2( 0, -o2), fp, fps)) / 21.; /*vec4 scol = fp; scol = min(scol, getTexel(tc + dt * vec2( o, 0 ), fp, fps)); scol = min(scol, getTexel(tc + dt * vec2( 0, o ), fp, fps)); scol = min(scol, getTexel(tc + dt * vec2( -o, 0 ), fp, fps)); scol = min(scol, getTexel(tc + dt * vec2( 0, -o), fp, fps)); scol = min(scol, getTexel(tc + dt * vec2( o, o ), fp, fps)); scol = min(scol, getTexel(tc + dt * vec2( o, -o), fp, fps)); scol = min(scol, getTexel(tc + dt * vec2( -o, -o ), fp, fps)); scol = min(scol, getTexel(tc + dt * vec2( -o, o ), fp, fps)); scol = min(scol, getTexel(tc + dt * vec2( o2, 0 ), fp, fps)); scol = min(scol, getTexel(tc + dt * vec2( 0, o2), fp, fps)); scol = min(scol, getTexel(tc + dt * vec2(-o2, 0 ), fp, fps)); scol = min(scol, getTexel(tc + dt * vec2( 0, -o2), fp, fps));*/ qgl_FragData[0].rgba = vec4(vg1.z); }