Files
qad/libs/qglview/shaders/ssao_blur.frag
2020-08-25 22:24:02 +03:00

56 lines
2.1 KiB
GLSL

#version 150
uniform sampler2D t0, ts, tg1;
uniform float radius = 2;
uniform vec2 dt;
vec4 st;
vec4 getTexel(vec2 tc, vec4 ptc, float mul) {
vec4 tv = texture(t0, tc), ts = texture(ts, tc);
if (radius == 1) {
tv = vec4(tv.w);
ts = tv;
}
return vec4(min(ptc.r, ts.r), max(ptc.g, ts.g), ptc.b + /*mix(tv.b, st.b, clamp(abs(st.w - tv.w), 0, 1))*/tv.b * mul, 0);
}
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 scol = texture(t0, tc);
if (radius == 1)
scol = vec4(scol.w);
st = scol;
scol.b *= 3.;
scol = getTexel(tc + dt * vec2( o, 0 ), scol, 2);
scol = getTexel(tc + dt * vec2( 0, o ), scol, 2);
scol = getTexel(tc + dt * vec2( -o, 0 ), scol, 2);
scol = getTexel(tc + dt * vec2( 0, -o), scol, 2);
scol = getTexel(tc + dt * vec2( o, o ), scol, 1.5);
scol = getTexel(tc + dt * vec2( o, -o), scol, 1.5);
scol = getTexel(tc + dt * vec2( -o, -o ), scol, 1.5);
scol = getTexel(tc + dt * vec2( -o, o ), scol, 1.5);
scol = getTexel(tc + dt * vec2( o2, 0 ), scol, 1);
scol = getTexel(tc + dt * vec2( 0, o2), scol, 1);
scol = getTexel(tc + dt * vec2(-o2, 0 ), scol, 1);
scol = getTexel(tc + dt * vec2( 0, -o2), scol, 1);
scol.b /= 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(scol.rgb, texture(t0, tc).w);
}