【发布时间】:2018-03-02 00:36:13
【问题描述】:
我正在尝试将一个 GL_TEXTURE_2D 复制到 GL_TEXTURE_2D_ARRAY 纹理的选定切片中。
我尝试将通常的 Texture_2D 绑定到一个帧缓冲区,并且仅将 Texture_2D_Array 的一部分绑定到另一个帧缓冲区(两者具有相同的大小(宽度、高度、GL_RGB、GL_UNSIGNED_BYTE))。
后来我想glBlitFramebuffer 会将该纹理复制到这一切片中……但我想我误解了glFramebufferTexture3D 命令。
顺便说一句:GL_TEXTURE_2D 已正确加载,我也将其打印出来(有效)
这是我的代码:
//Create 2 FBOs for copying textures
glGenFramebuffers(1, &nFrameBufferRead); //FBO for texture2D
glGenFramebuffers(1, &nFrameBufferWrite); //FBO for one slice of the texture2d_array
CBasics::GetOpenGLError();
//generate the GL_TEXTURE_2D_ARRAY with given values (glgentextures is already called for this texture)
glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGB, nWidth, nHeight, countSlices, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
CBasics::GetOpenGLError();
//Bind the Texture2D to the readFramebuffer
glBindFramebuffer(GL_READ_FRAMEBUFFER, nFrameBufferRead);
glFramebufferTexture(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, texture2D_ID, 0);
CBasics::GetOpenGLError();
//try to bind the Texture2D_Array to the drawFramebuffer
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, nFrameBufferWrite);
CBasics::GetOpenGLError(); //till here everything works (no glerror)
glFramebufferTexture3D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D_ARRAY, texture2D_Array_ID, 0, slicenumber); // here the error appears
CBasics::GetOpenGLError();
//because of the error one step earlier here will be the next error...
glBlitFramebuffer(0, 0, nWidth, nHeight, 0, 0, nWidth, nHeight, GL_COLOR_BUFFER_BIT, GL_NEAREST);
CBasics::GetOpenGLError();
glFramebufferTexture3D 出现错误:GL_INVALID_VALUE
我想是因为
如果纹理不为零或不为 现有的纹理对象。
1st:这种方式可以正确地将纹理复制到数组切片中吗?或者有更好的方法吗?
第二个:是否可以只绑定 GL_TEXTURE_2D_ARRAY 的一个切片?
3rd:对于 GL_TEXTURE_2D_ARRAY,我需要 glFramebufferTexture3D 命令还是 glFramebufferTexture2D 命令?
【问题讨论】:
-
您实际上是在尝试复制数据,还是要渲染到该数组层?因为这是两个非常不同的操作。
-
@NicolBolas 我正在尝试复制数据...在 TEXTURE_2D_ARRAY 内的这个方法之后,一个切片应该是 TEXTURE_2D
标签: opengl