2016-12-26 2 views
1

Ich versuche, ein Stück von einem OpenGL-Textur-Array zu einem anderen zu kopieren. Ich würde dies gerne auf der GPU tun, ohne etwas von der CPU neu zu senden, wenn es möglich ist. (Dies ist ziemlich einfach in D3D zu tun, aber ich bin neu zu modernen OpenGL.)OpenGL Textur Array Layer Daten kopieren

Die nächste, die ich bekommen konnte, basierend auf Google und StackOverflow sucht, ist unten. Diese funktioniert fast, außer es kopiert nur von der ersten Scheibe im Quell-Array (auf die richtige Scheibe des Ziel-Array). Ich habe versucht, glFramebufferTexture3D zu verwenden, damit ich die Quellscheibe (die kommentierte Linie) spezifizieren konnte, aber das GL_INVALID_ENUM erzeugt, wenn ich GL_TEXTURE_2D_ARRAY für den textarget Parameter und GL_INVALID_OPERATION verwende, wenn ich GL_TEXTURE_3D verwende.

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); 

Antwort

3

Ich versuche, ein Stück von einem OpenGL-Textur-Array zu einem anderen zu kopieren.

Dann die Funktion you should be using is glCopyImageSubData. glCopyTextureSubImage Kopien aus dem Framebuffer. glCopyImageSubData kopiert von einer Textur in eine andere.

+0

Yup, das ist genau das, was ich brauchte, danke. –