C++ OpenGL:在GPU中纹理到纹理的复制

C++ OpenGL:在GPU中纹理到纹理的复制,c++,opengl,textures,gpu,C++,Opengl,Textures,Gpu,我想将一个纹理中已经存在于视频内存中的部分复制到另一个纹理中也已经存在于视频内存中的子区域。快速的无需通过CPU端内存 我就是这样做的: glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, src_texId, 0); glReadBuffer(GL_COLOR_ATTACHMENT0); glBindTexture(GL_TEXTURE_2D, dst_texId); glCopyTe

我想将一个纹理中已经存在于视频内存中的部分复制到另一个纹理中也已经存在于视频内存中的子区域。快速的无需通过CPU端内存

我就是这样做的:

glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, src_texId, 0);
glReadBuffer(GL_COLOR_ATTACHMENT0);
glBindTexture(GL_TEXTURE_2D, dst_texId);
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, dst_x, dst_y, src_x, src_y, width, height);
glBindTexture(GL_TEXTURE_2D, 0);

代码编译后,“我的目标”纹理确实收到更新,但它似乎无法正常工作,因为它是用蓝色垃圾数据更新的。我的方法错了吗?

我觉得这基本上没问题。我想当执行此代码时,您有一个有效的FBO绑定到
GL\u READ\u FRAMEBUFFER
?另一个选项是使用
glBlitFramebuffer()
将两个纹理都附加到FBO。但您正在尝试的应该也可以。我如何确保有效的FBO绑定到GL_READ_FRAMEBUFFER?可能这就是调用glCheckFramebufferStatus(GL_READ_FRAMEBUFFER)的问题;就在这些命令返回GL_FRAMEBUFFER_COMPLETE之前,所以我假设它是有效的?src_texId和dst_texId的内部纹理格式是什么?在我看来这基本上是可以的。我想当执行此代码时,您有一个有效的FBO绑定到
GL\u READ\u FRAMEBUFFER
?另一个选项是使用
glBlitFramebuffer()
将两个纹理都附加到FBO。但您正在尝试的应该也可以。我如何确保有效的FBO绑定到GL_READ_FRAMEBUFFER?可能这就是调用glCheckFramebufferStatus(GL_READ_FRAMEBUFFER)的问题;在这些命令返回GL_FRAMEBUFFER_COMPLETE之前,我假设它是有效的?src_texId和dst_texId的内部纹理格式是什么?