我可以在多大程度上接触到Android设备'从Froyo开始安全地使用图形硬件?
我想在Android设备上使用两个帧缓冲区实现简单的页面翻转方案。
它应该是这样的:
渲染到帧缓冲区A.(帧缓冲区A是后缓冲区,当前显示帧缓冲区B.)
等待下一个VSYNC(可能是VSYNC中断?)
告诉操作系统显示帧缓冲区A并使帧缓冲区B成为后台缓冲区。
渲染到帧缓冲区B.(帧缓冲区B是后缓冲区,当前显示帧缓冲区A.)
等待下一个VSYNC(可能是VSYNC中断?)
告诉操作系统显示帧缓冲区B并使帧缓冲区A成为后台缓冲区。
重复步骤1 - 6。
每秒更新显示屏大约15 - 25次,最适合我的需求。 (我永远不需要60 fps或任何高于30 fps的东西。)
我计划仅使用OpenGL ES 2.0进行所有渲染。
答案 0 :(得分:3)
你不需要这样做。如果你这样做,你的缓冲将是冗余的操作系统为你做的缓冲,并且只会增加延迟和开销。
您可以从this page了解当前的Android图形架构。较旧版本的Android有很大不同,但从一开始就在Android中出现了双缓冲或三缓冲的概念。它是OpenGL ES工作原理的重要组成部分。
来自应用程序端的一个棘手的问题是,如果你想用这个来调整你的app行为(而不是在队列填充时阻塞),那么VSYNC何时到达。参见"游戏循环"有关详细信息的文档部分,但知道您可以使用Choreographer获取API 16 +上的VSYNC时序。
根据this dashboard,Froyo及其早期约占市场的0.7%。针对姜饼和后来更典型。如果您的目标是API 16(第一个Jellybean版本),您现在会损失大约25%(13.5%姜饼,11.4%ICS),主要是由于硬件要求较低而配有姜饼的低端设备。