【发布时间】:2016-12-26 20:53:31
【问题描述】:
我正在尝试将切片从一个 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);
【问题讨论】: