使用单个顶点缓冲区还是很多?

时间:2014-10-25 15:36:13

标签: webgl

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

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

1 个答案:

答案 0 :(得分:5)

GPU是状态机,切换状态很昂贵(由于WebGL实现引入了额外的检查层,因此通过WebGL完成更多)因此绑定顶点缓冲区非常昂贵。

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

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

以下是通过降低成本(顶部最昂贵)订购的API调用列表:

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

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

虽然这些基准测试是在Nvidia硬件上完成的,但它也是AMD和英特尔图形硬件的良好指南。