3

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

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

4

1 回答 1

5

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

这并不是真正需要担心的事情。如果您glDelete*是对象,则不应再次直接使用该名称。

于 2021-09-07T13:21:25.013 回答