我现在关心的应用程序是一个 3d 模型查看器。用户偶尔会加载一个大的新网格进行渲染,并且应该(必须)丢弃旧的网格。
正因为如此,这GL_STATIC_DRAW
显然是对 VBO 的正确提示。
在这一点上我有点不确定是glDeleteBuffers()
我的 VBO 和 IBO,还有glDeleteVertexArrays[OES]()
我的 VAO,还是不做这些,只glBufferData()
用我新加载的网格做 VBO 和 IBO,而不必删除和重新生成任何东西或重新-定义VAOglVertexAttribPointer
状态。(子问题:如果我只删除我的 VBO 然后重新生成它,但我的 VAO 完好无损,我还能跳过glVertexAttribPointer()
吗?)
如果我调用 OpenGL 确实会丢弃 VBO 中的先前数据glBufferData()
,那么这是完美的。据我所知,glBufferData()
应该重新分配 VBO。
但实际上,我正在寻找的是一个具体的解释,说明我重新加载到这个洋葱的不同层之间会有什么不同,如果我只想改变我的顶点和我需要走多远应用程序中的索引缓冲区内容(原始几何),或者甚至存在一种可能需要重新生成或删除 VBO 的情况。我确实看到相同的 VBO 可能在不同的 VAO 集之间有用地共享,我可以想象这样一种情况,你有一些你永远不会再使用的 VAO,所以你会释放它们,但看起来像 VBO如果存在 API 供您重新分配其中包含的数据,则可以继续回收。
我发现那里的所有教程和解释都只涉及帮助您设置东西,但是现在我已经弄清楚了如何正确处理其余的这些细节并不太清楚。