drawPoints = regl({
vert: `
precision mediump float;
attribute float speed, x, y0, y1, dy;
attribute float isB;
varying float c;
uniform float interp;
void main() {
float t = mod(x + interp*speed, 1.0);
// cubic ease
float ct = t < 0.5
? 4.0 * t * t * t
: -0.5 * pow(abs(2.0 * t - 2.0), 3.0) + 1.0;
float x = mix(-1.0, 1.0, t);
float y = mix(y0, y1, ct);
gl_Position = vec4(x, y + dy, 0, 1);
gl_PointSize = 5.0;
c = isB;
}`,
frag: `
precision mediump float;
varying float c;
void main() {
vec4 color0 = vec4(.400, .761, .647, 1);
vec4 color1 = vec4(.553, .627, .796, 1);
vec4 color2 = vec4(.988, .553, .384, 1);
vec4 color3 = vec4(.906, .541, .765, 1);
vec4 color4 = vec4(.651, .847, .329, 1);
vec4 color5 = vec4(1.00, .851, .184, 1);
vec4 color6 = vec4(.898, .769, .580, 1);
vec4 color7 = vec4(1.00, 1.00, 1.00, 1);
if (c == 0.0) {
gl_FragColor = color0;
} else if (c == 1.0) {
gl_FragColor = color1;
} else if (c == 2.0) {
gl_FragColor = color2;
} else if (c == 3.0) {
gl_FragColor = color3;
} else if (c == 4.0) {
gl_FragColor = color4;
} else if (c == 10.0) {
gl_FragColor = color7;
} else {
gl_FragColor = color4;
}
}`,
attributes: {
speed: createdData.map(d => d.speed),
x: createdData.map(d => d.x),
y0: createdData.map(d => d.y0),
y1: createdData.map(d => d.y1),
dy: createdData.map(d => d.dy),
isB: createdData.map(d => d.isB)
},
uniforms: {
interp: (ctx, props) => props.interp
},
primitive: 'point',
count: createdData.length,
})