Documentation
uniform sampler2D image;
uniform vec2 pixelSize;
uniform bool horizontal;

in vec2 texCoord;

out vec4 outColor;

void main()
{
    const float weights[5] = float[] (0.227027, 0.1945946, 0.1216216, 0.054054, 0.016216);

    vec3 result = texture(image, texCoord).rgb * weights[0];

    if (horizontal) {
        for(int i = 1; i < 5; ++i) {
            float fi = float(i);

            result += texture(image, texCoord + vec2(pixelSize.x * fi, 0.0)).rgb * weights[i];
            result += texture(image, texCoord - vec2(pixelSize.x * fi, 0.0)).rgb * weights[i];
        }
    } else {
        for(int i = 1; i < 5; ++i) {
            float fi = float(i);

            result += texture(image, texCoord + vec2(0.0, pixelSize.y * fi)).rgb * weights[i];
            result += texture(image, texCoord - vec2(0.0, pixelSize.y * fi)).rgb * weights[i];
        }
    }

    outColor = vec4(result, 1.0);
}