#version 330 core in VS_OUT { vec2 tex_coords; } vs_out; out vec4 frag_color; uniform sampler2D image; uniform bool horizontal; uniform float weights[5] = float[](0.2270270270, 0.1945945946, 0.1216216216, 0.0540540541, 0.0162162162); void main(void) { vec2 tex_offset = 1.0 / textureSize(image, 0); vec3 result = texture(image, vs_out.tex_coords).rgb * weights[0]; if (horizontal) { for (int i = 1; i < 5; i++) { result += texture(image, vs_out.tex_coords + vec2(tex_offset.x * i, 0.0)).rgb * weights[i]; result += texture(image, vs_out.tex_coords - vec2(tex_offset.x * i, 0.0)).rgb * weights[i]; } } else { for (int i = 1; i < 5; i++) { result += texture(image, vs_out.tex_coords + vec2(0.0, tex_offset.y * i)).rgb * weights[i]; result += texture(image, vs_out.tex_coords - vec2(0.0, tex_offset.y * i)).rgb * weights[i]; } } frag_color = vec4(result, 1.0); }