opengl - 我使用多少个 VBO?

标签 opengl vbo

所以我了解如何使用顶点缓冲区对象,并且它比立即模式绘图提供了很大的性能提升。我将绘制很多 2D 四边形( Sprite ),我想知道我是否应该为每个四边形创建一个 VBO,或者创建一个 VBO 来保存所有数据?

最佳答案

您不应该为每个 Sprite /四边形使用新的 VBO。因此,在您的情况下,将它们全部放在一个 VBO 中将是更好的解决方案。

但总的来说,我认为这不能用一句话来回答。

为每个 Quad 创建一个新的 VBO 不会给你带来真正的性能提升。如果这样做,会浪费很多时间 glBindBuffer要求切换 VBO。但是,如果您创建包含过多数据的 VBO,您可能会遇到其他问题。

小型 VBO:

  • 在您的程序代码中通常更容易处理。您可以为您渲染的每个对象使用一个新的 VBO。通过这种方式,您可以在您的世界中轻松管理您的对象
  • 如果 VBO 太小(只有几个三角形),您将不会获得太多好处。在缓冲区之间切换缓冲区(以及可能切换着色器/纹理)会浪费很多时间

  • 大型 VBO:
  • 您可以使用单个 drawArrays() 渲染大量对象要求最佳性能。
  • 根据您的数据,您可能会在单个 VBO 中管理大量对象产生开销(如果您想移动这些对象中的一个并旋转另一个对象怎么办?)。
  • 如果您的 VBO 太大,则可能无法将它们移入 VRAM

  • 以下链接可以帮助您:

    Vertex Specification Best Practices

    关于opengl - 我使用多少个 VBO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8661629/

    相关文章:

    c# - 在 C# 中使用交错顶点的 VBO

    c++ - OpenGL 有没有办法复制现有的 VAO

    c++ - OpenGL 纹理未显示(纯色而不是纹理)或显示有伪影

    c++ - 使用 glDrawArrays 绘制多个对象

    java - VBO 纹理不能正常工作 LWJGL

    windows - 3D 应用程序中鼠标输入的帧率不均匀

    c++ - 填充我的 IBO 的最佳方法是什么?

    opengl - 线性过滤可以用于 MSAA 纹理到非 MSAA 纹理的 FBO blit 吗?

    opengl - OpenGL 4 中顶点选择的最佳方法

    c++ - 在 OpenGL 中使用 std::vector 作为顶点/元素列表