创建新的VBO还是仅交换数据更好?(OpenGL)

5
在OpenGL渲染应用程序中,通常最好创建和维护一个顶点缓冲区,并使用glBufferData在每一帧中交换数据,而不是删除VBO并在每一帧中重新创建它。直觉告诉我交换数据更好,但我看到一些示例程序却采用了后者,所以我有点困惑。我读了Nvidia关于VBO的白皮书,但作为OpenGL新手,它并没有太多意义。感谢您提前的任何建议。
2个回答

5

由于每帧都会生成全新的数据,因此文档似乎表明使用GL_STREAM_DRAW是正确的方法。


0
VBO(Vertex Buffer Object)的重要之处在于它们是存储在图形内存中而不是计算机主内存中的渲染数据缓冲区。这使得它们在其中的数据不需要(太频繁地)更新时使用非常高效,因为每次这样做时,计算机都必须将(潜在的大量)数据从主内存传输到图形内存 - 这是很慢的。
因此,理想情况是将所有所需的渲染数据一次性放入VBO中,然后仅通过OpenGL函数(如矩阵变换或着色器)来操作它们。
例如,您可以将每个网格的世界空间坐标和纹理坐标放入VBO中,并且永远不会直接触摸它们;您将使用模型视图矩阵、光照函数和着色器来渲染它们。
您可以采取更多措施来优化VBO的使用,但这就是我所理解的基础知识。
在此处查找一些好的提示和更多详细信息:如何使用OpenGL 3.x VBO呈现动态世界?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接