使用OpenGL制作2D游戏的最有效方法是什么?

3
我有一个为iPhone编写的游戏引擎,使用OpenGL绘制2D精灵、背景等。我本可以使用Cocos2d,但我认为通过自己编写可以学到更多。虽然它能正常工作且相当高效,但在Instruments OpenGL分析器中运行我的游戏时,它返回了很多有关如何改进的指针,谈论了VBO等问题。
假设我的游戏只绘制许多应用不同纹理的2D矩形,最有效的方法是什么?绘制2个三角形还是一个矩形更快?使用VBO是否太过浪费,还是真的能提升性能?
1个回答

2

好的,我不确定简单四边形的实际性能增益如何。但如果你的“几何形状”是静态的,那么你可以从显示列表中获得最大的收益。它们非常容易使用,几乎不需要更改任何代码。

需要注意的是,上下文切换是最昂贵的操作。这包括绑定纹理(非常昂贵)和更改颜色(不太昂贵)。因此,你可能可以尝试将所有精灵使用一个纹理一次性渲染。

如果你有一个大的静态关卡,你可以将整个关卡绘制到一个显示列表中,然后只调用该列表。需要注意的是,你仍然应该尝试优化上下文切换。

你还应该花一些时间编写代码来防止尝试渲染不可见的物体。(针对整个关卡的DL解决方案进行检查。)


1
自OpenGL 3.1起,显示列表已被弃用。VBO并不比它们复杂,应该使用它们来代替。 - Shautieh
是的,我已经非常注意上下文切换,并将其最小化(所有精灵都来自单个图集),可见性计算也是如此。但问题更多地涉及精灵 - 如果我正在绘制数百个移动的精灵/四边形,它们都应该是VBO,还是对于如此简单的几何形状而言,这样做过度了吗? - GoatInTheMachine
哇,真的吗,我不知道这个。我喜欢显示列表的原因是当你构建自定义场景并且有一些总是渲染相同的东西时,你可以将其压缩到一个DL中并感到满意。但我不知道OP是否会从VBO中获得很多好处,只能节省大量设置代码。 - rioki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接