我正在开发一个基于 2D Tile 的游戏,目前正在努力解决性能问题,因为即使在 iPad 3 上运行时,我的速度也在 10 - 15 FPS 左右。OpenGL ES 帧捕获显示我每帧调用 glDrawElements 689 次!很多吗?会不会是性能低下的情况?
我应该将所有内容堆叠在一个巨大的数组中并执行 1 次绘制调用吗?会有什么不同吗?
我正在开发一个基于 2D Tile 的游戏,目前正在努力解决性能问题,因为即使在 iPad 3 上运行时,我的速度也在 10 - 15 FPS 左右。OpenGL ES 帧捕获显示我每帧调用 glDrawElements 689 次!很多吗?会不会是性能低下的情况?
我应该将所有内容堆叠在一个巨大的数组中并执行 1 次绘制调用吗?会有什么不同吗?
此时,您当前受到命令问题的限制(假设),如果您运行 opengl 性能检测(它在 xcode 下(右键单击,打开开发人员工具),您可能需要通过首选项下载它)。
您的目标是在一天结束时受到填充率的限制,这里有一些提示可以帮助您实现目标
按绘制深度混合模式纹理 ID 对所有精灵进行排序
排序后,将所有精灵打包到一个顶点缓冲区对象和一个索引缓冲区对象中。
当您的绘制深度、混合模式或纹理 ID 发生变化时,是时候进行新的绘制调用并绑定这些资源了。
还要记住,您的精灵应该在 cpu 端(pos x mvp)平展您的顶点,并且您不应该发送矩阵和任何其他属性(例如颜色)应该是顶点的一部分。
典型顶点
{
float pos[3]
int color
float uv[2]
}