我和我的朋友正试图用OpenGL加速2D游戏.视频芯片组是Radeon X1250,似乎动力不足,可以显示多达80个1366×768全帧/秒.鉴于我们正在吸引许多精灵,在我们瞄准的60 FPS下,性能大幅下降.您能否提供
编辑:一些澄清:
开发在Linux下的C中进行.我们用SDL做到了,但性能不尽如人意,所以我们决定切换到OpenGL,事实证明要快得多,当然还有一个推动实现更多功能,要求我们每帧重绘整个屏幕.
我们的测试程序在1366×768屏幕上呈现纹理化的256×256四方块.如果在缓冲交换之前铺设单层瓷砖,则产生80 FPS,如果两层铺设的帧速率低于60 FPS.鉴于该板将被要求同时解码和渲染一些小的MPEG,这可能是不令人满意的.
我只是认为我可以寻找由于游戏是2D而导致的优化 – 我想到了,例如:
1)如果可以禁用纹理缩放.
2)直接渲染到帧缓冲区(虽然我们听说glDrawPixels应该很慢.
如果你过度抽取帧缓冲区(特别是在高分辨率下),那么你最终会降低帧速率,因为卡的填充率有限制.
虽然现代卡可以进行大量操作,但它们仍然可以限制它们可以推动多少像素.
为了减少这一点,一些建议是:
>不要每帧绘制所有内容 – 如果可能的话 – 将一些部分渲染到其他缓冲区,然后将它们混合在一起 – 如果可能的话,以较低的分辨率混合
>如果不需要,请不要使用混合 – 混合比绘制不透明的东西慢得多
>使用更便宜的片段着色器/片段程序 – 如果你使用的是可编程管道(注意:我不知道你怎么知道它有多贵)
>尽可能多地使用剔除 – 避免画出根本无法看到的东西.如果精灵完全(或大部分)隐藏在其他精灵之后,则无需绘制精灵.
>缩放/插值可能相对便宜 – 使用较低的res纹理并缩放它们 – 特别是如果你的纹理开始时“模糊”.
如果你这样做是为了获得一些时髦的烟雾/粒子效果,你可能无法使用所有或许多这些优化.