我正在实现一个2D游戏,其中包含许多不同尺寸的独立矩形游戏块。每块的尺寸在框架之间不改变。大多数作品将显示图像并共享相同的片段着色器。我是WebGL的新手,对于这种情况下的性能,我尚不清楚最佳的策略是管理顶点缓冲区。
最好使用单个顶点缓冲区(四倍)表示游戏的所有棋子,然后为每个棋子在顶点着色器中重新缩放这些顶点?或者,我应该为每块定义一个单独的静态顶点缓冲区吗?
GPU是状态机,切换状态非常昂贵(由于通过WebGL实现引入了额外的检查层,因此切换状态非常昂贵),因此绑定顶点缓冲区非常昂贵。
将API调用减少到最少的良好做法。
即使有多个不同的对象,您仍要使用单个顶点缓冲区并使用drawArrays
ordrawElements
方法的offset参数。
以下是通过降低昂贵程度而排序的API调用列表(顶部是最昂贵的):
有关此方面的更多信息,您可以观看Cass Everitt和John McDonald撰写的精彩演讲“超越移植:现代OpenGL如何能够从根本上减少驱动程序开销”,这也是上面的清单。
尽管这些基准测试是在Nvidia硬件上完成的,但它也是AMD和Intel图形硬件的良好指南。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句