【问题标题】:Use single vertex buffer or many?使用单个顶点缓冲区还是多个?
【发布时间】:2014-12-28 08:44:28
【问题描述】:

我正在实现一个 2D 游戏,其中包含许多不同尺寸的独立矩形游戏块。每件作品的尺寸在帧之间不会改变。大多数片段将显示图像并共享相同的片段着色器。我是 WebGL 的新手,我不清楚在这种情况下管理顶点缓冲区的最佳策略是什么。

使用单个顶点缓冲区(四边形)来表示所有游戏片段,然后在顶点着色器中为每个片段重新缩放这些顶点是否更好?或者,我应该为每个片段定义一个单独的静态顶点缓冲区吗?

【问题讨论】:

    标签: webgl


    【解决方案1】:

    GPU 是一个状态机,切换状态的成本很高(通过 WebGL 完成时更是如此,因为 WebGL 实现引入了额外的检查层),因此绑定顶点缓冲区的成本很高。

    将 API 调用降至最低的良好做法。

    即使有多个不同对象,您仍然希望使用单个顶点缓冲区并使用drawArraysdrawElements 方法的偏移参数。

    这里是 API 调用列表,按照成本降序排列(顶部是最昂贵的):

    • 帧缓冲区
    • 程序
    • 纹理绑定
    • 顶点格式
    • 顶点绑定
    • 统一更新

    有关这方面的更多信息,您可以观看 Cass Everitt 和 John McDonald 的精彩演讲 Beyond Porting: How Modern OpenGL can Radically Reduce Driver Overhead,这也是上面列表的来源。

    虽然这些基准测试是在 Nvidia 硬件上完成的,但它也适用于 AMD 和 Intel 图形硬件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多