我在代码 (C) 的开头设置了许多纹理。每个纹理都正确生成(没有错误),我将纹理名称作为 GLuint 存储在图像结构中以供以后使用。在程序结束时,GLuint 被传递回 GLdeleteTextures() 并且程序退出。
问题是我在第一次尝试使用 GLDeleteTextures() 时不断收到错误消息。对 GLDeleteTextures() 的所有后续调用都不会产生错误。
错误(来自 gluErrorString)状态为“无效枚举”。
额外信息。通过调用 glBindTexture(GL_TEXTURE_2D, NULL) 在删除之前所有纹理都未绑定。所有纹理名称 (GLuint) 在创建时都经过验证,它们与删除时使用的名称相同。删除时纹理的顺序无关紧要,这是第一次调用删除的问题。
当前的解决方法。我发现在第一个纹理上重复 glDeleteTextures() 有效,例如...
glDeleteTextures(1,&MyImage->texName); // Will produce 'invalid enumerant'
glDeleteTextures(1,&MyImage->texName); // This time it will work!
我通过在第二次删除后生成新纹理并比较纹理名称来仔细检查上面的代码。在第二次调用后纹理确实被删除并正确放回系统。
我有红皮书,它对纹理删除有点模糊。是否有一组必须执行的明确步骤才能正确删除纹理?