我什么时候应该调用glDeleteBuffersARB?应用程序结束时应该这样做吗?我能否自动化删除顶点缓冲对象的过程?例如,类似于smart_ptr的东西。
glDeleteBuffersARB
。缓冲区对象已经成为核心GL功能超过十年了;如果你仍在使用ARB后缀的扩展函数,请停止。如果你遵循使用它们的教程,请再次停止;它显然太旧而无用。glDeleteBuffers
?当您完成操作对象时,即没有更多用途并想要摆脱它时,应使用它,与普通C++对象的delete
一样。shared_ptr
来管理这些资源,则理论上可能使它们超过实际的OpenGL上下文的生存期。那是不好的。个人而言,我更喜欢更严格的管理方案,将GL对象的生命周期与上下文的生命周期紧密联系起来。shared_ptr
对于OpenGL资源管理是很好的。它仍然可以用于'间接'地管理它们-这样删除资源包装类就不会调用glDelete*,而是将此资源标记为“已释放”,因此它们可以在适当时候(例如,当尊重的上下文变为当前时)被glDeleted。即使这些资源没有被提到的包装类标记为“空闲”,上下文管理器类也可以在上下文被销毁之前删除(glDelete)这些资源。 - kerim