我正在尝试将纹理帧缓冲区复制到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扩展,它支持多个渲染目标,因此我们可以设置附件没有问题(因此为什么渲染到纹理帧缓冲区的工作无懈可击)。
我意识到,由于无法指定读取缓冲区,因此也许该技术无法正常工作?有什么想法或解决方法吗?
如果可以使用WebGL 2.0,则可以执行以下操作:
gl.bindFramebuffer(GL_READ_FRAMEBUFFER, src);
gl.bindFramebuffer(GL_DRAW_FRAMEBUFFER, dst);
gl.blitFramebuffer(src_left, src_bottom, src_right, src_top, 0, 0, dst_width, dst_height, mask, GL_NEAREST);
否则我认为使用是正确的gl.copyTexImage2D
。在这里可以找到更详细的答案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句