【发布时间】:2021-11-04 09:17:21
【问题描述】:
我读过 VBO(顶点缓冲区对象)本质上保留了一个引用计数,因此如果将 VBO 的名称指定给 glDeleteBuffers(),那么如果一个活着的 VAO(顶点数组对象)仍然存在,它就不会真正被解散引用它。这种行为类似于“智能指针”,较新的语言越来越多地采用。但是这在多大程度上是正确的并且可以围绕它进行设计,如果它也适用于 IBO(索引缓冲区对象),我还没有找到任何相关信息。
如果 VBO 由引用它的 VAO 保持活动状态,并且我不打算更新它或在 VAO 死亡后使用它,我认为最好的办法是销毁我对它的引用。这样做合适吗?我可以对 IBO 做同样的事情吗?
【问题讨论】:
-
出于好奇,您是在哪里读到的?我在 Khronos 网站上进行了简短搜索,但没有找到任何东西。这很可能是真的,但它可能是一个内部设计选择,随时可能发生变化,不应依赖。
-
@Yun - 我只是假设它在内部使用引用计数;我了解到 VAO 只能通过阅读几个月前某个地方的一个非常简短的提及来保持 VBO 的活力。我也找不到太多关于它的信息。
标签: c++ opengl vertex-buffer vertex-array-object index-buffer