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

fex*_*fex 2 c++ opengl vbo

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

Nic*_*las 7

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

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

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

你可以,但它不会给你那么多买.此外,您还有等待删除对象的真正风险,直到为时已晚.

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

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