// assembled from some stackoverflow answers const start = performance.now(); // Draw the fullscreen quad twgl.drawBufferInfo(gl, quad_bufferInfo); let sync = gl.fenceSync(gl.SYNC_GPU_COMMANDS_COMPLETE, 0); checkSync = () => { const status = gl.clientWaitSync(sync, 0, 0); switch (status) { case gl.TIMEOUT_EXPIRED: return setTimeout(checkSync); case gl.WAIT_FAILED: throw new Error('should never get here'); default: gl.deleteSync(sync); const duration = (performance.now() - start); console.log(`finished rendering in ${duration.toFixed(1)}ms`); // trigger preview capture now that GL has finished rendering triggerPreview(); } } setTimeout(checkSync);