我目前正在开发一个 opengl ES 1.1 游戏,最小 sdk 8,目标 sdk 17,我看到我可以访问的 4.0.3 平板电脑上的 eglSwapBuffers 出现异常大的延迟,这不会出现在新旧版本的 android 上. 我也很幸运能够使用两台华硕变压器 T101,其中一台正在运行 Honeycomb,因此可以排除这是硬件的限制。
下表显示了许多设备及其性能。
模型 OS FPS Max/avg eglSwapBuffer 时间 (ms) 宏碁 A500 4.0.3 12.5 70 /67 华硕 T101 3.1 21.8 30/21 华硕 T101 4.0.3 12.2 79/65 宏达一 X 4.0.4 35.9 14/5 连结 7 4.1.2 35.6 16/5 三星 GTP1000 2.2 24.5 36/28
可以看到,即使是古老的单核 GTP1000 的帧率也是双核 4.0.3 设备的两倍。
我正在运行 4 个线程,一个 2D 画布、GL、UI 和一个每 200 毫秒更新一次 AI 的心跳。在 GL 线程上的 eglSwapBuffers 调用期间,CPU 几乎什么也没做。感觉就像我正在触发某种节能或 GPU 节流,但我无法找到任何有关此的信息。
如果所有其他操作不花费任何成本,仅交换缓冲区所花费的时间就会将帧速率限制在 <15FPS。我每帧绘制 150 个带纹理的三角形条形四边形。
如果你能指出我正确的方向,我会很激动,一个星期的大部分时间里,我一直在用头撞砖墙。