我正在实施一款2D游戏,其中包含许多不同尺寸的独立矩形游戏。每件的尺寸在框架之间不会改变。大多数部分将显示图像并共享相同的片段着色器。我是WebGL的新手,我不清楚在这种情况下管理顶点缓冲区的最佳策略是什么。
使用单个顶点缓冲区(四边形)来表示游戏的所有部分,然后在每个部分的顶点着色器中重新缩放这些顶点是否更好?或者,我应该为每个片段定义一个单独的静态顶点缓冲区吗?
答案 0 :(得分:5)
GPU是状态机,切换状态很昂贵(由于WebGL实现引入了额外的检查层,因此通过WebGL完成更多)因此绑定顶点缓冲区非常昂贵。
将API调用降至最低的良好做法。
即使拥有多个不同的对象,您仍然希望使用单个顶点缓冲区并使用drawArrays
或drawElements
方法的offset参数。
以下是通过降低成本(顶部最昂贵)订购的API调用列表:
有关这方面的更多信息,您可以观看Cass Everitt和John McDonald的精彩演讲Beyond Porting: How Modern OpenGL can Radically Reduce Driver Overhead,这也是上述列表的来源。
虽然这些基准测试是在Nvidia硬件上完成的,但它也是AMD和英特尔图形硬件的良好指南。