【问题标题】:OpenGL GLDeleteTextures() fails to delete the first textureOpenGL GLDeleteTextures() 无法删除第一个纹理
【发布时间】:2012-10-19 18:38:35
【问题描述】:

我在代码 (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!

我通过在第二次删除后生成新纹理并比较纹理名称来仔细检查上面的代码。纹理确实在第二次调用后被删除并正确放回系统中。

我有红皮书,它对纹理删除有点模糊。是否必须执行一组明确的步骤才能正确删除纹理?

【问题讨论】:

  • 您确定该行正在生成错误吗?错误似乎是 glDeleteTextures 之前的先前调用未决。将错误检查行移到第一个 deleteTextures 之前。
  • 张贴SSCCE 说明问题。
  • 我刚刚得出了同样的结论。这不是 glDeleteTextures。它似乎来自 glEnable(GL_ALPHA)。幽灵般的。谢谢 genpfault。
  • @OP:如果这个问题已经得到解答,请将我的答案转换为社区 wiki 否则删除它。

标签: c opengl


【解决方案1】:

问题不在于glDeleteTextures(),而是来自glEnable(GL_ALPHA)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 2014-09-17
    相关资源
    最近更新 更多