draw = {
gl.clear(gl.COLOR_BUFFER_BIT);
gl.enableVertexAttribArray(timestepPosition);
gl.enableVertexAttribArray(renderPosition);
for (let i = 0; i < 64; ++i) {
gl.useProgram(timestepProgram);
gl.viewport(0, 0, K, K);
gl.disable(gl.BLEND);
if (i & 1) {
gl.bindFramebuffer(gl.FRAMEBUFFER, fb1);
gl.bindTexture(gl.TEXTURE_2D, t2);
} else {
gl.bindFramebuffer(gl.FRAMEBUFFER, fb2);
gl.bindTexture(gl.TEXTURE_2D, t1);
}
gl.bindBuffer(gl.ARRAY_BUFFER, qb);
gl.vertexAttribPointer(timestepPosition, 2, gl.FLOAT, false, 0, 0);
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
if (i < 8) continue;
gl.useProgram(renderProgram);
gl.viewport(0, 0, gl.canvas.width, gl.canvas.height);
gl.enable(gl.BLEND);
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
gl.bindBuffer(gl.ARRAY_BUFFER, ib);
gl.vertexAttribPointer(renderPosition, 2, gl.UNSIGNED_SHORT, false, 0, 0);
gl.drawArrays(gl.POINTS, 0, K * K);
yield;
}
}