#version 330 core out float fragColor; uniform sampler2D ao_tex; void main() { ivec2 coord = ivec2(gl_FragCoord.xy) - ivec2(2); float ao = 0.0; ao += texelFetch(ao_tex, coord, 0).r; ao += texelFetch(ao_tex, coord + ivec2(1, 0), 0).r; ao += texelFetch(ao_tex, coord + ivec2(0, 1), 0).r; ao += texelFetch(ao_tex, coord + ivec2(1, 1), 0).r; ao += texelFetch(ao_tex, coord + ivec2(2, 0), 0).r; ao += texelFetch(ao_tex, coord + ivec2(3, 0), 0).r; ao += texelFetch(ao_tex, coord + ivec2(2, 1), 0).r; ao += texelFetch(ao_tex, coord + ivec2(3, 1), 0).r; ao += texelFetch(ao_tex, coord + ivec2(0, 2), 0).r; ao += texelFetch(ao_tex, coord + ivec2(1, 2), 0).r; ao += texelFetch(ao_tex, coord + ivec2(0, 3), 0).r; ao += texelFetch(ao_tex, coord + ivec2(1, 3), 0).r; ao += texelFetch(ao_tex, coord + ivec2(2, 2), 0).r; ao += texelFetch(ao_tex, coord + ivec2(3, 2), 0).r; ao += texelFetch(ao_tex, coord + ivec2(2, 3), 0).r; ao += texelFetch(ao_tex, coord + ivec2(3, 3), 0).r; ao /= 16.0; fragColor = ao; }