顶点缓冲区对象(删除进程)opengl

时间:2012-05-13 17:20:25

标签: c++ opengl vbo

什么时候应该调用glDeleteBuffersARB?申请结束时我应该这样做吗?我可以以某种方式自动化删除顶点缓冲区对象的过程吗?比如像smart_ptr这样的东西。

1 个答案:

答案 0 :(得分:7)

从不。你永远不应该致电glDeleteBuffersARB。缓冲对象已经成为核心GL功能已经超过十年了;如果您仍在使用ARB后缀扩展功能, STOP 。如果您按照使用它们的教程,再次 STOP ;它显然太旧了,无法发挥作用。

现在,您何时应该使用glDeleteBuffers?您应该在delete用于常规C ++对象的同时使用它。也就是说,当你用对象完成时使用它。当你不再使用它并想要摆脱它时。

  

所以我可以用析构函数创建vbo类来删除vbo对象吗?然后将对象创建为smart_ptr以自动化所有内容?

你可以,但它不会给你那么多买。此外,您运行非常真实的等待删除对象的风险,直到为时已晚。

在创建OpenGL上下文(并使其成为当前)之前或每当GL上下文不是最新的时(例如,在您销毁GL上下文之后)调用任何OpenGL函数是非法的。尝试这样做并不好。

如果使用shared_ptr来管理这些资源,理论上它们可能比实际的OpenGL上下文更长久。那很糟。就个人而言,我更倾向于采用更严格的管理方案,将GL对象的生命周期与上下文的生命周期紧密联系起来。