我正在尝试编写一个类来进行片段着色器链接,方法是使用帧缓冲区对象渲染到纹理着色器着色器,然后使用片段着色器等将该纹理渲染到另一个纹理等。
我正在尝试处理内存泄漏,当我调整窗口大小并删除/重新分配我正在使用的纹理时,纹理没有被正确删除。
以下是代码段:
//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运行它时,它告诉我“警告:调试程序删除不存在的纹理。纹理名称:1”当我尝试删除texIds [0]时。 (我现在将它们放在数组中的原因是因为我曾经同时创建和释放它们,但是当你一次释放2个纹理时,它将在一个上静默失败并继续另一个)。 / p>
如果我不创建texIds [1],我可以释放texIds [0],但是一旦我创建了第二个纹理,我就不能再释放我创建的第一个纹理了。有什么想法吗?
答案 0 :(得分:1)
错误可能在texIds数组中。它是GLUint的数组吗?
你可能会错误地将它声明为单词数组,因此在为[1]元素生成纹理时,从元素[0]中取出的uint指针会被破坏。