使用 VBO 最快和最灵活(适用于大多数情况)的方法是什么?
我正在开发一个 openGL 应用程序,我希望它能够获得最佳性能,所以我需要有人来回答这些问题。我读了很多问题和答案,但我想有太多我不需要的信息会弄乱我的大脑......
- 我应该使用多少个 vbo?
- 我应该如何创建 vbos?
- 如果数据大小不固定,我应该如何更新 vbos 数据?
- 我应该如何渲染 vbos?
- 我应该如何处理我不想再渲染的 vbos 中的数据?
我应该使用多少个 vbo?
需要多少就多少,听起来很傻,但很好,就是这样
如果数据大小不固定,我应该如何更新 vbos 数据?
用不同的数据和长度覆盖和渲染相同的 VBO。
我应该如何创建 vbos?
我应该如何渲染 vbos?
我应该如何处理我不想再渲染的 vbos 中的数据?
创建一个新的 vbo 并将数据复制到其中或仅渲染内存中的 vbo 的一部分。
要仅渲染部分,请参见glVertexBuffer glTexCoordPointer(只需根据偏移量计算新指针和新大小)
编辑1:
对所有事情都使用单个 VBO 感觉是错误的,因为您必须自己管理新顶点位置/纹理坐标的分配,这很快就会变得非常混乱。
最好将小道具分组到 VBO 中并批处理绘图命令。
我可以使用 glBufferSubData 将数据添加到缓冲区(将 100 个元素添加到大小为 x 的缓冲区)吗?
不,这是不可能的,因为描述说updates a subset of a buffer object's data store
一个子集是一个集合中的一个较小的集合。
编辑 2
一个很好的教程也是学习现代 3D 图形编程,但它不是 VBO 特定的。