#version 300 es precision highp float; in vec2 v_texcoord; uniform sampler2D tex; out vec4 fragColor; float blur_channel_r(vec2 center) { float o = 0.003; float c = 0.0; c += texture(tex, center + vec2(-o, -o)).r * 0.0625; c += texture(tex, center + vec2( 0, -o)).r * 0.125; c += texture(tex, center + vec2( o, -o)).r * 0.0625; c += texture(tex, center + vec2(-o, 0)).r * 0.125; c += texture(tex, center ).r * 0.25; c += texture(tex, center + vec2( o, 0)).r * 0.125; c += texture(tex, center + vec2(-o, o)).r * 0.0625; c += texture(tex, center + vec2( 0, o)).r * 0.125; c += texture(tex, center + vec2( o, o)).r * 0.0625; return c; } float blur_channel_g(vec2 center) { float o = 0.003; float c = 0.0; c += texture(tex, center + vec2(-o, -o)).g * 0.0625; c += texture(tex, center + vec2( 0, -o)).g * 0.125; c += texture(tex, center + vec2( o, -o)).g * 0.0625; c += texture(tex, center + vec2(-o, 0)).g * 0.125; c += texture(tex, center ).g * 0.25; c += texture(tex, center + vec2( o, 0)).g * 0.125; c += texture(tex, center + vec2(-o, o)).g * 0.0625; c += texture(tex, center + vec2( 0, o)).g * 0.125; c += texture(tex, center + vec2( o, o)).g * 0.0625; return c; } float blur_channel_b(vec2 center) { float o = 0.003; float c = 0.0; c += texture(tex, center + vec2(-o, -o)).b * 0.0625; c += texture(tex, center + vec2( 0, -o)).b * 0.125; c += texture(tex, center + vec2( o, -o)).b * 0.0625; c += texture(tex, center + vec2(-o, 0)).b * 0.125; c += texture(tex, center ).b * 0.25; c += texture(tex, center + vec2( o, 0)).b * 0.125; c += texture(tex, center + vec2(-o, o)).b * 0.0625; c += texture(tex, center + vec2( 0, o)).b * 0.125; c += texture(tex, center + vec2( o, o)).b * 0.0625; return c; } void main() { float chroma = 0.004; float a = texture(tex, v_texcoord).a; float r = blur_channel_r(v_texcoord + vec2( chroma, 0.0)); float g = blur_channel_g(v_texcoord); float b = blur_channel_b(v_texcoord - vec2( chroma, 0.0)); fragColor = vec4(r, g, b, a); }