什么时候应该调用glDeleteBuffersARB?申请结束时我应该这样做吗?我可以以某种方式自动化删除顶点缓冲区对象的过程吗?比如像smart_ptr这样的东西。
答案 0 :(得分:7)
从不。你永远不应该致电glDeleteBuffersARB
。缓冲对象已经成为核心GL功能已经超过十年了;如果您仍在使用ARB后缀扩展功能, STOP 。如果您按照使用它们的教程,再次 STOP ;它显然太旧了,无法发挥作用。
现在,您何时应该使用glDeleteBuffers
?您应该在delete
用于常规C ++对象的同时使用它。也就是说,当你用对象完成时使用它。当你不再使用它并想要摆脱它时。
所以我可以用析构函数创建vbo类来删除vbo对象吗?然后将对象创建为smart_ptr以自动化所有内容?
你可以,但它不会给你那么多买。此外,您运行非常真实的等待删除对象的风险,直到为时已晚。
在创建OpenGL上下文(并使其成为当前)之前或每当GL上下文不是最新的时(例如,在您销毁GL上下文之后)调用任何OpenGL函数是非法的。尝试这样做并不好。
如果使用shared_ptr
来管理这些资源,理论上它们可能比实际的OpenGL上下文更长久。那很糟。就个人而言,我更倾向于采用更严格的管理方案,将GL对象的生命周期与上下文的生命周期紧密联系起来。