#version 330 core in vert_t { vec2 tex_coords; } vert; out vec4 frag_color; uniform sampler2D colorbuffer; uniform float weights[5] = float[](0.2270270270, 0.1945945946, 0.1216216216, 0.0540540541, 0.0162162162); void main() { vec2 texture_offset = 1.0 / textureSize(colorbuffer, 0); vec3 result = texture(colorbuffer, vert.tex_coords).rgb * weights[0]; for (int x = 1; x < weights.length(); x++) { vec2 offset = vec2(texture_offset.x * x, 0.0f); result += texture(colorbuffer, vert.tex_coords + offset).rgb * weights[x]; result += texture(colorbuffer, vert.tex_coords - offset).rgb * weights[x]; } for (int y = 1; y < weights.length(); y++) { vec2 offset = vec2(0.0f, texture_offset.y * y); result += texture(colorbuffer, vert.tex_coords + offset).rgb * weights[y]; result += texture(colorbuffer, vert.tex_coords - offset).rgb * weights[y]; } frag_color = vec4(result, 1.0); }