13

使用 VBO 最快和最灵活(适用于大多数情况)的方法是什么?

我正在开发一个 openGL 应用程序,我希望它能够获得最佳性能,所以我需要有人来回答这些问题。我读了很多问题和答案,但我想有太多我不需要的信息会弄乱我的大脑......

  • 我应该使用多少个 vbo?
  • 我应该如何创建 vbos?
  • 如果数据大小不固定,我应该如何更新 vbos 数据?
  • 我应该如何渲染 vbos?
  • 我应该如何处理我不想再渲染的 vbos 中的数据?
4

2 回答 2

18
于 2013-04-10T11:45:39.783 回答
-2

我应该使用多少个 vbo?

需要多少就多少,听起来很傻,但很好,就是这样

如果数据大小不固定,我应该如何更新 vbos 数据?

用不同的数据和长度覆盖和渲染相同的 VBO。

我应该如何创建 vbos?

我应该如何渲染 vbos?

VBO 教程

我应该如何处理我不想再渲染的 vbos 中的数据?

创建一个新的 vbo 并将数据复制到其中或仅渲染内存中的 vbo 的一部分。

要仅渲染部分,请参见glVertexBuffer glTexCoordPointer(只需根据偏移量计算新指针和新大小)

编辑1:

对所有事情都使用单个 VBO 感觉是错误的,因为您必须自己管理新顶点位置/纹理坐标的分配,这很快就会变得非常混乱。

最好将小道具分组到 VBO 中并批处理绘图命令。

我可以使用 glBufferSubData 将数据添加到缓冲区(将 100 个元素添加到大小为 x 的缓冲区)吗?

不,这是不可能的,因为描述说updates a subset of a buffer object's data store一个子集是一个集合中的一个较小的集合。

编辑 2

一个很好的教程也是学习现代 3D 图形编程,但它不是 VBO 特定的。

于 2013-04-10T10:46:52.067 回答