readData(shape) {
    const gl = this.context
    const buf = new ArrayBuffer(shape[0] * shape[1] * 4 * 4)
    const view = new Float32Array(buf)
    gl.readPixels(0, 0, shape[1], shape[0], gl.RGBA, gl.FLOAT, view)
    const out = []
    for (let i = 0; i < view.length; i += 4) {
      out.push(view[i])
    }
    return new Float32Array(out)
  }
Reads pixel data from framebuffer

@param {number[]} shape
@returns {Float32Array}