【问题标题】:Webgl readPixels() invalid operation: invalid format/type combinationWebgl readPixels() 无效操作:无效的格式/类型组合
【发布时间】:2016-05-03 23:13:01
【问题描述】:

我正在尝试读取我拥有的纹理的 RGBA 值,但它不断返回以下错误,并且每个值都显示为 0:

WebGL: INVALID_OPERATION: readPixels: invalid format/type combination

这是我在初始化时的代码,其中像素是纹理值数组:

   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)

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

【问题讨论】:

    标签: javascript textures webgl shader


    【解决方案1】:

    使用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);
    

    归功于this answer下面的评论

    【讨论】:

      猜你喜欢
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      • 2020-09-11
      • 1970-01-01
      • 2013-12-07
      • 2013-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多