generateSDF_GL = (...args) => {
  return new Promise((resolve, reject) => {
    queue.push(() => {
      const start = now()
      try {
        mainThreadGenerator.webgl.generateIntoCanvas(...args)
        resolve({ timing: now() - start })
      } catch (err) {
        reject(err)
      }
    })
    if (!timer) {
      timer = setTimeout(nextChunk, 0)
    }
  })
}
WebGL-based implementation executed on the main thread. Requests are executed in time-bounded
macrotask chunks to allow render frames to execute in between.