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

opengl es2:Advantages of using vertex buffer objects(VBO)

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

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

当您在没有 VBO 驱动程序的情况下使用 glVertexAttribPointer 时,必须每帧将您的顶点数据复制到 GPU 可访问内存。客户端数组需要 copy

有两个原因
  1. GPU 无法访问您的所有内存。它只能看到 GPU 驱动程序映射到它的页面。
  2. OpenGL 承诺您可以在 glDraw* returns 之后自由更改客户端数组内存,但 GPU 渲染在 return.
  3. 之后异步发生

VBO 数据由驱动程序分配并映射到 GPU。如果您保留相同的顶点数据,则可以避免复制。如果您只使用 glBufferSubData 更新顶点数组的一部分,也可以优化更新。 (例如,只更新纹理坐标,不更新顶点位置)