我正在尝试将纹理帧缓冲区复制到 WebGL 中的另一个帧缓冲区,到目前为止它只是给出了一个黑屏。我能够毫无问题地在纹理帧缓冲区中渲染。
这是我认为可以工作的代码(它目前在 iOS 上工作):
// bind source fbo while we remember current fbo
glGetIntegerv(GL_FRAMEBUFFER_BINDING, ¤t_fbo);
glBindFramebuffer(GL_FRAMEBUFFER, src_framebuffer);
// setup source fbo attachments
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, src_handle, 0);
//glReadBuffer(GL_COLOR_ATTACHMENT0); <- commented out because it is not available in WebGL
// bind destination fbo
glActiveTexture(GL_TEXTURE0 + i);
glBindTexture(dest_target, dest_handle);
// copy from source to dest
glCopyTexImage2D(dest_target, 0, dest_format, 0, 0, dest_width, dest_height, 0);
// set back original fbo
//glReadBuffer(GL_NONE);
glBindFramebuffer(GL_FRAMEBUFFER, current_fbo);
WebGL 不支持 glReadBuffer 所以我不能指定它,但是使用 WEBGL_draw_buffers 扩展它支持多个渲染目标,所以我们可以设置附件没有问题(因此渲染到纹理帧缓冲区的工作完美无缺)。
我意识到,由于我无法指定读取缓冲区,也许这种技术行不通?有什么想法或解决方法吗?