来自OpenGL wiki:
如果要更新小部分,请使用glBufferSubData。如果要更新整个VBO,请使用glBufferData(据报道,此信息来自nVidia文档)。但是,另一种在更新整个缓冲区时可以正常工作的方法是使用NULL指针调用glBufferData,然后使用新内容调用glBufferSubData。指向glBufferData的NULL指针使驱动程序知道您不关心以前的内容,因此可以自由地替换完全不同的缓冲区,这有助于更有效地上传驱动程序管道。
我从研究中了解到,“帮助管道上传更有效”意味着什么呢?它允许异步缓冲区写入,这使得动态缓冲区更快。
然而,这段摘录和其他人似乎认为glBufferData的“NULL”参数非常重要,它是孤立的原因,也是促进异步写入的原因。
但是我的常识告诉我,它不需要为null,你可以在那里指向你的一些数据,而不是null。孤立的重要部分就是你再次调用glBufferData并因此重新分配缓冲区的存储,从而使旧存储孤立,从而允许异步写入。想到这个我是对的吗?