我正在为移动平台开发基于Sprite的2D游戏,并且正在使用OpenGL(实际上是Irrlicht)来渲染图形。首先,我以一种简单的方式实现了精灵渲染:将每个游戏对象渲染为具有自己的GPU绘制调用的四边形,这意味着如果我有200个游戏对象,则每帧进行200个绘制调用。当然,这是一个错误的选择,我的游戏完全受CPU限制,因为每个GPU绘制调用中都有少许CPU开销。GPU大多数时候都保持空闲状态。
现在,我认为我可以通过将对象分成大批并仅用几次绘制调用就可以渲染这些批处理来提高性能。我实施了批处理(以便共享相同纹理的每个游戏对象都以同一批进行渲染),并认为我的问题已经消失了……只是发现我的帧频比以前更低。
为什么?好吧,我有200个(或更多)游戏对象,并且每秒更新60次。我必须在每一帧中重新计算CPU中顶点的新位置(平移和旋转)(移动平台上的GPU不支持实例化,因此我无法在其中进行实例化),并每秒进行48000次计算(200 * 60 * 4,因为每个子图都有4个顶点)似乎太慢了。
我可以做些什么来提高性能?所有游戏对象都(几乎)每帧都在移动/旋转,所以我真的不得不重新计算顶点位置。我能想到的唯一优化是旋转的查找表,这样我就不必计算旋转。点精灵会有所帮助吗?有讨厌的骇客吗?还要别的吗?
谢谢。