#version 300 es precision mediump float; in vec2 texCoord; uniform sampler2D selection; uniform float spacing; uniform float threshold; uniform float time; uniform vec4 borderColor1; uniform vec4 borderColor2; uniform float centerSampleMix; out vec4 fragColor; void main() { float centerSample = step(threshold, texelFetch(selection, ivec2(texCoord), 0).r); float luminance = step(0.5, mod(gl_FragCoord.x + gl_FragCoord.y + time * 2.0 * spacing, spacing) / spacing); fragColor = mix(borderColor1, borderColor2, luminance) * centerSample * centerSampleMix; }