fragmentShader = {
const shader = gl.createShader(gl.FRAGMENT_SHADER);
gl.getExtension("OES_standard_derivatives");
gl.shaderSource(shader, `
precision highp float;
uniform float u_grid;
uniform float u_time;
uniform vec2 u_size;
#extension GL_OES_standard_derivatives : enable
float aastep(float edge, float x) {
#ifdef GL_OES_standard_derivatives
float w = length(vec2(dFdx(x), dFdy(x))) * 0.70710678118654757;
return smoothstep(edge - w, edge + w, x);
#else
return step(edge, x);
#endif
}
void main() {
float l = (length(mod(gl_FragCoord.xy, u_grid) - u_grid / 2.0) / (u_grid / 2.0) - 0.5) / 2.0;
float k = aastep(0.5 + sin(u_time / 2.0) / 1.5, gl_FragCoord.x / u_size.x + l);
gl_FragColor = vec4(vec3(k), 1.0);
}
`);
gl.compileShader(shader);
if (gl.getShaderParameter(shader, gl.COMPILE_STATUS)) return shader;
throw new Error(gl.getShaderInfoLog(shader));
}