我正在尝试将切片从一个OpenGL纹理数组复制到另一个。如果可能的话,我想在GPU上执行此操作,而无需从CPU重新提交任何内容。 (这在D3D中很容易做到,但我是现代OpenGL的新手。)
根据Google和StackOverflow搜索,我能够获得的最接近的数据如下所示。此几乎有效,但它仅从源数组中的第一个切片复制到目标数组的正确切片。我尝试使用glFramebufferTexture3D,因此我可以指定源切片(注释行),但如果我使用GL_TEXTURE_2D_ARRAY作为textarget参数,则生成GL_INVALID_ENUM;如果使用GL_TEXTURE_3D,则生成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);
答案 0 :(得分:3)
我正在尝试将切片从一个OpenGL纹理数组复制到另一个。
然后是函数you should be using is glCopyImageSubData
。来自 framebuffer 的glCopyTextureSubImage
份副本。 glCopyImageSubData
从一个纹理复制到另一个纹理。
答案 1 :(得分:0)
将2D数组纹理的特定图层附加到帧缓冲区的正确命令是glFrameBufferTextureLayer
。