vec3 vpKawaseBlur(sampler2D tex, vec2 uv, vec2 texelSize, float offset)
{
    vec2 d = texelSize * offset;

    vec3 color = vec3(0.0);

    color += texture2D(tex, uv + vec2(-d.x, -d.y)).rgb;
    color += texture2D(tex, uv + vec2( d.x, -d.y)).rgb;
    color += texture2D(tex, uv + vec2(-d.x,  d.y)).rgb;
    color += texture2D(tex, uv + vec2( d.x,  d.y)).rgb;

    return color * 0.25;
}


vec3 vpSharpen(sampler2D tex, vec2 uv, vec2 texel, float strength)
{
    vec3 center = texture2D(tex, uv).rgb;

    vec3 blur = vec3(0.0);

    blur += texture2D(tex, uv + vec2(-texel.x, 0.0)).rgb;
    blur += texture2D(tex, uv + vec2( texel.x, 0.0)).rgb;
    blur += texture2D(tex, uv + vec2(0.0,-texel.y)).rgb;
    blur += texture2D(tex, uv + vec2(0.0, texel.y)).rgb;

    blur *= 0.25;

    return center + (center - blur) * strength;
}