Opengl es WebGL是否将纹理帧缓冲区复制到纹理帧缓冲区?

Opengl es WebGL是否将纹理帧缓冲区复制到纹理帧缓冲区?,opengl-es,rendering,webgl,webgl-extensions,Opengl Es,Rendering,Webgl,Webgl Extensions,我正在尝试将一个纹理帧缓冲区复制到WebGL中的另一个,到目前为止,它只会显示一个黑屏。我能够在纹理帧缓冲区中渲染,没有问题 以下是我认为可以使用的代码(它目前可以在iOS上使用): //在我们记住当前fbo时绑定源fbo glGetIntegerv(GL\u帧缓冲区\u绑定和当前\u fbo); glBindFramebuffer(GL\u FRAMEBUFFER,src\u FRAMEBUFFER); //设置源fbo附件 glFramebufferTexture2D(GL_帧缓冲区、GL_

我正在尝试将一个纹理帧缓冲区复制到WebGL中的另一个,到目前为止,它只会显示一个黑屏。我能够在纹理帧缓冲区中渲染,没有问题

以下是我认为可以使用的代码(它目前可以在iOS上使用):

//在我们记住当前fbo时绑定源fbo
glGetIntegerv(GL\u帧缓冲区\u绑定和当前\u fbo);
glBindFramebuffer(GL\u FRAMEBUFFER,src\u FRAMEBUFFER);
//设置源fbo附件
glFramebufferTexture2D(GL_帧缓冲区、GL_颜色_附件0、GL_纹理_2D、src_句柄,0);

//glReadBuffer(GL_COLOR_ATTACHMENT0) CopyTexImage2D工作正常。这里有两个一致性测试


您是否检查了JavaScript控制台的错误?您只复制级别0,这意味着您需要正确设置筛选或生成mips。JavaScript控制台可能会包含关于纹理不可渲染的错误消息

如果可以使用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
是正确的。可以找到更详细的答案。

我很困惑。上面的代码不是OpenGLWebGL@gman是的,这是因为我是通过Emscripten编译代码的,所以它最终还是WebGL。愚蠢的是,我不允许发布没有代码的JSFIDLE链接,但代码与要点无关,所以这里有一个链接,我不确定这个链接是否提供了我试图实现的示例。让我再次解释一下:我试图从一个可渲染纹理帧缓冲区读取并将其复制到另一个可渲染纹理帧缓冲区。通常,我提供的代码在iOS上运行良好。但是,既然我们不能在WebGL中指定读取缓冲区,那么替代的路径是什么?如何使用从源纹理/帧缓冲区采样的方式渲染到目标帧缓冲区。无论如何,glCopyTexImage2D很可能在驱动代码中实现类似的功能。
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);