WebGL readPixels()无效操作:格式/类型组合无效。

3
我正在尝试读取纹理的RGBA值,但它不断返回以下错误,每个值都为0:
WebGL: INVALID_OPERATION: readPixels: invalid format/type combination

这是我的初始化代码,其中pixels是一个纹理值的数组:
   texture = gl.createTexture()
   gl.activeTexture(gl.TEXTURE0)
   gl.bindTexture(gl.TEXTURE_2D, texture)
   gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1)
   gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, n, n, 0,
     gl.RGBA, gl.FLOAT, new Float32Array(pixels))

   gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST)
   gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST)

   FBO = gl.createFramebuffer()

   gl.bindFramebuffer(gl.FRAMEBUFFER, FBO)
   gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0,
       gl.TEXTURE_2D, texture, 0)

然后,在单击事件中,我运行以下代码:

gl.bindFramebuffer(gl.FRAMEBUFFER, FBO);

var data = new Uint8Array(resolution * resolution * 4);
gl.readPixels(0, 0, resolution, resolution, gl.RGBA, gl.UNSIGNED_BYTE, data);

console.log(data)

数据返回了一个大的零数组。正确的格式和类型组合是什么,或者我在哪里出了问题?

1个回答

3

使用gl.getContext("experimental-webgl")后,我成功读取了浮点纹理的像素,代码如下:

  gl.bindFramebuffer(gl.FRAMEBUFFER, _this.myFrameBufferObject);
  var data = new Float32Array(resolution * resolution * 4);
  gl.readPixels(0,0,resolution,resolution,gl.RGBA,gl.FLOAT,data);

以下评论的荣誉归于此答案


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接