Opengl glDeleteTextures不删除纹理

Opengl glDeleteTextures不删除纹理,opengl,memory-leaks,Opengl,Memory Leaks,我正在尝试编写一个类来进行片段着色器链接,方法是使用帧缓冲区对象使用frament着色器渲染到纹理,然后使用片段着色器将该纹理渲染到另一个纹理,等等 我现在正试图处理内存泄漏问题,当我调整窗口大小并删除/重新分配正在使用的纹理时,纹理没有被正确删除 以下是一段代码片段: //Allocate first texture glGenTextures( 1, &texIds[0] ); glBindTexture( GL_TEXTURE_2D, texIds[0] ); glTexImage

我正在尝试编写一个类来进行片段着色器链接,方法是使用帧缓冲区对象使用frament着色器渲染到纹理,然后使用片段着色器将该纹理渲染到另一个纹理,等等

我现在正试图处理内存泄漏问题,当我调整窗口大小并删除/重新分配正在使用的纹理时,纹理没有被正确删除

以下是一段代码片段:

//Allocate first texture
glGenTextures( 1, &texIds[0] );
glBindTexture( GL_TEXTURE_2D, texIds[0] );
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA8, screenX, screenY, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL );

//Allocate second texture
glGenTextures( 1, &texIds[1] );
glBindTexture( GL_TEXTURE_2D, texIds[1] );
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA8, screenX, screenY, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL );

//Try to free first texture -- ALWAYS FAILS
glDeleteTextures( 1, &texIds[0] );
//Try to free second texture
glDeleteTextures( 1, &texIds[1] );
当我使用gDEBugger运行此命令时,当我尝试删除texid[0]时,它会告诉我“警告:调试的程序删除不存在的纹理。纹理名称:1”。(我现在把它们放在一个数组中的原因是因为我习惯于同时创建和释放它们,但是当你一次释放两个纹理时,它会在一个纹理上无声地失败,然后在另一个纹理上继续)


如果我不创建texid[1],我可以释放texid[0],但一旦我创建第二个纹理,我就不能再释放我创建的第一个纹理。有什么想法吗?

也许错误在texIds数组中。是胶水的数组吗


您可能会错误地将其声明为单词数组,因此,在为[1]元素生成纹理时,从元素[0]获取的uint指针被破坏。

当我将texIds声明为
GLuint texIds[2]时,该片段对我有效紧接之前。也许问题在别处?@6NSString奇怪。glGetError()返回0,但gDEBugger告诉我(如果我在纹理查看器中查看的话,它会告诉我)正在创建一些无关的纹理。我正在运行OSX10.6,如果这有帮助的话。我还将尝试创建一个仅包含此代码的程序。完全不相关的注释:要调整纹理大小,无需删除并重新生成整个纹理对象,只需使用新大小调用
glTexImage2D
。告诉我们texIds的声明[]