我什么时候应该调用 glDeleteBuffersARB ?申请结束时我应该这样做吗?我可以以某种方式自动化删除顶点缓冲区对象的过程吗?例如 smart_ptr 之类的东西。
问问题
8398 次
1 回答
9
绝不。你永远不应该打电话glDeleteBuffersARB
。十多年来,缓冲区对象一直是 GL 的核心功能。如果您仍在使用带 ARB 后缀的扩展功能,请停止。如果您遵循使用它们的教程,请再次停止;它显然太旧而无法使用。
现在,你应该什么时候使用glDeleteBuffers
?delete
您应该在使用常规 C++ 对象的同时使用它。也就是说,在完成对象后使用它。当您不再使用它并想摆脱它时。
那么我可以使用析构函数为 vbo 创建类来删除 vbo 对象吗?然后将对象创建为 smart_ptr 以使一切自动化?
你可以,但它不会为你买那么多。此外,您冒着等待删除对象的真正风险,直到为时已晚。
在创建 OpenGL 上下文之前(并使其成为当前)或当 GL 上下文不是当前时(例如,在您销毁 GL 上下文之后)调用任何 OpenGL 函数是非法的。尝试这样做并不好。
如果您使用shared_ptr
这些资源来管理这些资源,理论上它们可能会比实际的 OpenGL 上下文更长寿。那很糟。就个人而言,我更喜欢一种更严格的管理方案,将 GL 对象的生命周期与上下文的生命周期牢固地联系起来。
于 2012-05-13T18:01:07.223 回答