2016-12-26 34 views
1

我試圖從一個OpenGL紋理數組複製一個切片到另一個。如果可能的話,我想在GPU上執行此操作,而不從CPU重新提交任何內容。 (這在D3D中很容易做到,但我是現代OpenGL的新手。)OpenGL紋理陣列圖層數據副本

基於谷歌和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); 

回答

3

我想從一個OpenGL紋理數組複製一個切片到另一個。

然後功能you should be using is glCopyImageSubDataglCopyTextureSubImage拷貝自幀緩衝區glCopyImageSubData從一個紋理複製到另一個紋理。

+0

是的,這正是我需要的,謝謝。 –