glDeleteTextures不删除纹理

sta*_*oat 5 opengl memory-leaks

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

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

这是一段代码:

//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] );
Run Code Online (Sandbox Code Playgroud)

当我使用gDEBugger运行它时,它告诉我"警告:调试程序删除不存在的纹理.纹理名称:1"当我尝试删除texIds [0]时.(我现在将它们放在数组中的原因是因为我曾经同时创建和释放它们,但是当你一次释放2个纹理时,它将在一个上静默失败并继续另一个).

如果我不创建texIds [1],我可以释放texIds [0],但是一旦我创建了第二个纹理,我就不能再释放我创建的第一个纹理了.有任何想法吗?

Kro*_*ica 1

也许错误出现在 texIds 数组中。它是 GLUint 数组吗?

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