#version 300 es precision mediump float; in vec2 vertTexCoord; uniform sampler2D colorTexture; out vec4 fragColor; void addSample(inout vec4 color, ivec2 offset, inout float sampleCount) { vec4 sample = texelFetch(colorTexture, ivec2(vertTexCoord) + offset, 0); if (sample.a > 0.0) { color += sample; sampleCount += 1.0; } } void main() { fragColor = texelFetch(colorTexture, ivec2(vertTexCoord), 0); if (fragColor.a == 0.0) { float sampleCount = 0.0; addSample(fragColor, ivec2(-1, 0), sampleCount); addSample(fragColor, ivec2(1, 0), sampleCount); addSample(fragColor, ivec2(0, -1), sampleCount); addSample(fragColor, ivec2(0, 1), sampleCount); if (sampleCount == 0.0) { addSample(fragColor, ivec2(-1, -1), sampleCount); addSample(fragColor, ivec2(1, -1), sampleCount); addSample(fragColor, ivec2(-1, 1), sampleCount); addSample(fragColor, ivec2(1, 1), sampleCount); } if (sampleCount > 0.0) { fragColor /= sampleCount; } } }