在OpenGL中删除纹理

4

在程序退出前,我是否需要删除我创建的所有纹理(使用glDeleteTextures),或者OpenGL会自动删除这些纹理?


4
我不熟悉OpenGL释放纹理资源的保证,但是及时清理资源从来都不是一个坏主意。考虑到这是一个C++问题,使用RAII封装纹理的类是一个好的选择。 - Kaiged
1
http://www.opengl.org/sdk/docs/man/xhtml/glDeleteTextures.xml - KK.
1
据我所知,任何未使用的纹理都很快会被交换出工作集,但很可能在进程退出之前不会被清理。 - Ani
2个回答

4
根据OpenGL上下文的管理方式,您可能不需要删除纹理。例如,请参见此问题
尽管存在一些共识,即清理自己的资源是好的,但使用C++ RAII时要小心!如果创建或销毁通过RAII管理OpenGL对象的C++对象时没有OpenGL上下文,将会发生未定义的行为。
请参见:面向对象语言问题 OpenGL API和OpenGL对象与C++面向对象编程原则之间的映射并不直观。

2

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

然而,自己清理资源永远都是一个好习惯。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接