opengl es2:使用顶点缓冲对象(VBO)的优点

时间:2016-10-27 13:37:37

标签: android opengl-es-2.0 vertex-buffer-objects

我使用glVertexAttribPointer每帧(~242kb)加载我的顶点数据大约需要8ms。
我是否会通过使用VBO获得任何性能提升?
我认为答案是否定的因为我还有如果glBufferData加载数据的速度比glVertexAttribPointer快,那么获得性能提升的唯一方法就是这样吗?

1 个答案:

答案 0 :(得分:2)

如果你有静态顶点数据,那么VBO具有非常明显的性能优势,因为数据保存在GPU可访问的内存中。

当您使用不带VBO的glVertexAttribPointer时,驱动程序必须每帧将顶点数据复制到GPU可访问内存。客户端阵列需要复制的原因有两个

  1. GPU无法访问您的所有内存。它只能看到GPU驱动程序映射到它的页面。
  2. OpenGL承诺在glDraw *返回后可以自由更改客户端数组内存,但GPU返回后会异步发生。
  3. VBO数据由驱动程序分配并映射到GPU。如果保留相同的顶点数据,则可以避免复制。如果只使用glBufferSubData更新部分顶点数组,也可以优化更新。 (例如,只更新没有顶点位置更新的纹理坐标)