绑定到 VAO 后,我可以 glDeleteBuffer 一个 VBO 和 IBO 吗?

Can I glDeleteBuffer a VBO and IBO after binding to a VAO?

我读到 VBO(顶点缓冲区对象)本质上保持引用计数,因此如果 VBO 的名称被赋予 glDeleteBuffers(),如果一个活的 VAO(顶点Array Object) 仍然引用它。这种行为类似于“智能指针”,越来越多的新语言被采用。但是这在多大程度上是正确的并且可以围绕它进行设计,如果它也适用于 IBO(索引缓冲区对象),我还没有找到任何信息。

如果 VBO 由引用它的 VAO 保持活动状态并且我不打算更新它或在 VAO 死亡后使用它,我认为最好的做法是销毁我对它的引用。这样做合适吗?我可以对 IBO 做同样的事情吗?

对象可以附加到其他对象。只要一个对象附加到另一个对象,附加的对象就不会通过调用 glDelete* 实际上被销毁。只有当它脱离或它所附着的对象也被销毁后,它才会被销毁。

这真的不是什么值得担心的事情。如果您 glDelete* 一个对象,您不应该再次直接使用该名称。