#version 330 core in vec2 vUV; out float FragColor; uniform sampler2D ssaoInput; uniform vec2 texelSize; uniform int horizontal; const float w0 = 0.2270270270; const float w1 = 0.1945945946; const float w2 = 0.1216216216; const float w3 = 0.0540540541; const float w4 = 0.0162162162; void main() { float result = 0.0; if (horizontal == 1) { result += texture(ssaoInput, vUV).r * w0; result += texture(ssaoInput, vUV + vec2(texelSize.x, 0.0)).r * w1; result += texture(ssaoInput, vUV - vec2(texelSize.x, 0.0)).r * w1; result += texture(ssaoInput, vUV + vec2(2.0 * texelSize.x, 0.0)).r * w2; result += texture(ssaoInput, vUV - vec2(2.0 * texelSize.x, 0.0)).r * w2; result += texture(ssaoInput, vUV + vec2(3.0 * texelSize.x, 0.0)).r * w3; result += texture(ssaoInput, vUV - vec2(3.0 * texelSize.x, 0.0)).r * w3; result += texture(ssaoInput, vUV + vec2(4.0 * texelSize.x, 0.0)).r * w4; result += texture(ssaoInput, vUV - vec2(4.0 * texelSize.x, 0.0)).r * w4; } else { result += texture(ssaoInput, vUV).r * w0; result += texture(ssaoInput, vUV + vec2(0.0, texelSize.y)).r * w1; result += texture(ssaoInput, vUV - vec2(0.0, texelSize.y)).r * w1; result += texture(ssaoInput, vUV + vec2(0.0, 2.0 * texelSize.y)).r * w2; result += texture(ssaoInput, vUV - vec2(0.0, 2.0 * texelSize.y)).r * w2; result += texture(ssaoInput, vUV + vec2(0.0, 3.0 * texelSize.y)).r * w3; result += texture(ssaoInput, vUV - vec2(0.0, 3.0 * texelSize.y)).r * w3; result += texture(ssaoInput, vUV + vec2(0.0, 4.0 * texelSize.y)).r * w4; result += texture(ssaoInput, vUV - vec2(0.0, 4.0 * texelSize.y)).r * w4; } FragColor = result; }