OpenGL纹理数组图层数据拷贝

OpenGL texture array layer data copy

我正在尝试将切片从一个 OpenGL 纹理数组复制到另一个。如果可能的话,我想在 GPU 上执行此操作而不从 CPU 重新提交任何内容。 (这在 D3D 中很容易做到,但我是现代 OpenGL 的新手。)

根据 google 和 Whosebug 搜索,我能得到的最接近的结果如下。这个 almost 有效,只是它只从源数组中的 first 切片复制(到目标数组的正确切片)。我尝试使用 glFramebufferTexture3D,这样我就可以指定源切片(注释行),但是如果我使用 GL_TEXTURE_2D_ARRAY 作为 textarget 参数,则会生成 GL_INVALID_ENUM,如果我使用 [=22,则会生成 GL_INVALID_OPERATION =].

GLuint fb;
glGenFramebuffers(1, &fb);
glBindFramebuffer(GL_READ_FRAMEBUFFER, fb);

glFramebufferTexture(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, src_texture_handle, 0);
//glFramebufferTexture3D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D_ARRAY, src_texture_handle, 0, src_slice);
glReadBuffer(GL_COLOR_ATTACHMENT0);
glCopyTextureSubImage3D(dst_texture_handle, 0, 0, 0, dst_slice, 0, 0, width, height);

glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
glDeleteFramebuffers(1, &fb);

将二维数组纹理的特定层附加到帧缓冲区的正确命令是glFrameBufferTextureLayer

I'm trying to copy a slice from one OpenGL texture array to another.

然后函数you should be using is glCopyImageSubDataglCopyTextureSubImage 帧缓冲区 复制。 glCopyImageSubData 从一个纹理复制到另一个纹理。