【问题标题】:Deleting textures in opengl在opengl中删除纹理
【发布时间】:2012-08-14 18:14:45
【问题描述】:

我必须在程序存在之前删除我创建的所有纹理(使用glDeleteTextures),还是OpenGL自己删除纹理?

【问题讨论】:

  • 我不熟悉 OpenGL 对释放纹理资源的保证——但自己清理也不是一个坏主意。考虑到这是一个 C++ 问题,使用 RAII 将纹理包裹在一个类中是一个很好的方法。
  • AFAIK - 任何未使用的纹理肯定会很快从工作集中换出,但很可能在进程退出之前不会被清理。

标签: c++ windows opengl textures


【解决方案1】:

根据管理 OpenGL 上下文的内容,您可能不需要删除纹理。例如,请参阅this question

似乎确实有共识,尽管自己清理是件好事,但在使用 C++ RAII 时要小心!如果在没有 OpenGL 上下文的情况下创建或销毁通过 RAII 管理 OpenGL 对象的 C++ 对象,则会发生未定义的行为。

请参阅:The Object Oriented Language Problem

OpenGL API 和 OpenGL 对象不能直观地映射到 C++ OOP 原则。

【讨论】:

    【解决方案2】:

    一旦所有可以访问它们的上下文都被销毁,OpenGL 资源就会被隐式释放。当客户端终止时,进程的 OpenGL 上下文被破坏;但是在间接 GLX 上下文对象的情况下,X11 客户端可以共享它们,因此只有在最后一个可以访问它们的客户端终止后才能释放它们。

    尽管如此,清理自己总是一个好习惯。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-02
      • 1970-01-01
      • 2015-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多