【发布时间】:2018-01-16 05:03:17
【问题描述】:
是否可以将像素值作为具有多个附件的帧缓冲区上的浮点数检索? (WebGL 2)
我试过这个:
var framebuffer = _gl.createFramebuffer();
_gl.bindFramebuffer(_gl.FRAMEBUFFER, framebuffer);
_gl.framebufferTexture2D(_gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, texture1, 0);
_gl.framebufferTexture2D(_gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT1, _gl.TEXTURE_2D, texture2, 0);
_gl.drawBuffers([_gl.COLOR_ATTACHMENT0, _gl.COLOR_ATTACHMENT1]);
浮动纹理设置如下:
_gl.texImage2D(_gl.TEXTURE_2D, 0, _gl.RGBA32F, 256, 256, 0, _gl.RGBA, _gl.FLOAT, null);
然后我绑定帧缓冲区并调用 readPixels 来获取第一个附件的值:
_gl.readPixels(0, 0, 1, 256, _gl.RGBA, _gl.FLOAT, 0);
没有浮动纹理,这项工作但有浮动纹理,帧缓冲区保持不完整。
WebGL 2 规范似乎说这应该可以工作,但我现在有一些疑问,似乎 _gl.RGBA32F 似乎是问题所在,内部格式为 _gl.RGBA,它会产生不兼容的类型错误。
【问题讨论】:
-
"framebuffer保持不完整" framebuffer不完整的具体原因是什么?帧缓冲区完整性有很多失败的原因。
-
我正在使用github.com/vorg/webgl-debug 并且没有抛出错误,但是 checkFramebufferStatus 函数仍然报告它不完整,没有浮点数,使用相同的调用但使用不同的参数(_gl .RGBA 用于内部格式,_gl.UNSIGNED_BYTE 用于格式)。
-
"checkFramebufferStatus 函数报告它不完整" 不,它没有。它报告帧缓冲区不完整的特定原因。我问你想要那个原因。
-
确实,它报告了一个不完整的附件。
标签: javascript webgl2