我正在开发一个2D侧面滚动游戏,我需要优化我的平铺代码以获得更好的帧速率.截至目前,我正在使用纹理图集和16x16图块,以获得480x320的屏幕分辨率.级别在两个方向上滚动,并且明显大于1个屏幕(数千个像素).我使用glTranslate进行实际滚动.
到目前为止,我已经尝试过:
- 使用glTriangles仅绘制屏幕上的图块,每平方米图片2个(顶部太多)
将整个地图绘制为显示列表(在较小的水平上很好,在大的地方上减速)
将地图划分为显示列表的一半大小,然后剔除显示列表(对于双向滚动仍然变慢,过度绘制效率不高)
任何建议表示赞赏,但特别是我想知道:
- 我已经看到Vertex Arrays/VBO为此提出了建议,因为它们是动态的.什么是利用这个的最佳方式?如果我只保留1个顶点屏幕加上一些过度绘制,我必须每隔几帧重新复制一次数组,以考虑相对坐标的变化(将所有内容移动并添加新的行/列).如果我使用更多的透支,这似乎不是一个大赢家; 这就像半屏显示列表的想法.
- 如果在像这样的一堆小瓷砖上使用glScissor会给出任何增益,无论是显示列表还是顶点数组/ VBO
- 仅仅使用大纹理构建级别然后使用glScissor会更好吗?如果我这样做,那么失去平铺的内存节省是移动开发的一个问题(只是好奇,我目前在PC上)?这里提到了这种方法
谢谢 :)