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

Bob*_*lof 3 webgl

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

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

LJᛃ*_*LJᛃ 5

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

将API调用降至最低限度的良好做法.

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

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

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

有关这方面的更多信息,您可以观看这个超越移动的好话:现代OpenGL如何能够从根本上减少驾驶员开销由Cass Everitt和John McDonald,这也是上面列表的来源.

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