{
const canvas = DOM.canvas(width, height);
const gl = canvas.getContext("webgl");
const program = initShaderProgram(gl, vertexSource, fragmentSource);
const { position, velocity, acceleration } = createStraightMotion();
const positions = [];
const scales = [];
const translations = [];
const positionAttribLoc = gl.getAttribLocation(program, "a_position");
const scaleAttribLoc = gl.getAttribLocation(program, "a_scale");
const translateAttribLoc = gl.getAttribLocation(program, "a_translation");
const resolutionUniLoc = gl.getUniformLocation(program, "u_resolution");
gl.viewport(0, 0, width, height);
gl.useProgram(program);
while (position[0] < width) {
const numSquares = 25;
vec2.add(velocity, velocity, acceleration);
vec2.add(position, position, velocity);
createBrushStroke(
numSquares,
{ x: position[0], y: position[1] },
{ width: 0.5, height: 10 },
positions,
scales,
translations
);
const positionBuffer = initPositionBuffer(gl, positions);
const scaleBuffer = initPositionBuffer(gl, scales);
const translateBuffer = initPositionBuffer(gl, translations);
setPositionAttribute(gl, positionBuffer, positionAttribLoc);
setPositionAttribute(gl, scaleBuffer, scaleAttribLoc);
setPositionAttribute(gl, translateBuffer, translateAttribLoc);
gl.uniform2f(resolutionUniLoc, width, height);
gl.drawArrays(gl.TRIANGLES, 0, positions.length / 2);
yield Promises.delay(1, canvas);
}
return canvas;
}