#ifdef GL_ES precision highp float; #endif // Samplers varying vec2 vUV; uniform sampler2D textureSampler; uniform vec2 screenSize; uniform float kernel[9]; void main(void) { vec2 onePixel = vec2(1.0, 1.0) / screenSize; vec4 colorSum = texture2D(textureSampler, vUV + onePixel * vec2(-1, -1)) * kernel[0] + texture2D(textureSampler, vUV + onePixel * vec2(0, -1)) * kernel[1] + texture2D(textureSampler, vUV + onePixel * vec2(1, -1)) * kernel[2] + texture2D(textureSampler, vUV + onePixel * vec2(-1, 0)) * kernel[3] + texture2D(textureSampler, vUV + onePixel * vec2(0, 0)) * kernel[4] + texture2D(textureSampler, vUV + onePixel * vec2(1, 0)) * kernel[5] + texture2D(textureSampler, vUV + onePixel * vec2(-1, 1)) * kernel[6] + texture2D(textureSampler, vUV + onePixel * vec2(0, 1)) * kernel[7] + texture2D(textureSampler, vUV + onePixel * vec2(1, 1)) * kernel[8]; float kernelWeight = kernel[0] + kernel[1] + kernel[2] + kernel[3] + kernel[4] + kernel[5] + kernel[6] + kernel[7] + kernel[8]; if (kernelWeight <= 0.0) { kernelWeight = 1.0; } gl_FragColor = vec4((colorSum / kernelWeight).rgb, 1); }