2

从 Froyo 及更高版本开始,我可以安全地接近 Android 设备的图形硬件吗?

我想在 Android 设备上实现一个简单的页面翻转方案,使用两个帧缓冲区。

它应该是这样的:

  1. 渲染到帧缓冲区 A。(帧缓冲区 A 是后台缓冲区,当前显示帧缓冲区 B。)

  2. 等待下一个 VSYNC(可能是 VSYNC 中断?)

  3. 告诉操作系统显示帧缓冲区 A 并使帧缓冲区 B 成为后台缓冲区。

  4. 渲染到帧缓冲区 B。(帧缓冲区 B 是后台缓冲区,当前显示帧缓冲区 A。)

  5. 等待下一个 VSYNC(可能是 VSYNC 中断?)

  6. 告诉操作系统显示帧缓冲区 B 并使帧缓冲区 A 成为后台缓冲区。

重复步骤 1 - 6。

每秒更新大约 15 到 25 次显示器最适合我的需要。(我永远不需要 60 fps 或任何高于 30 fps 的速度。)

我打算只使用 OpenGL ES 2.0 进行所有渲染。

4

1 回答 1

3

你不需要这样做。如果你这样做了,你的缓冲将与操作系统为你做的缓冲相比是多余的,只会增加延迟和开销。

您可以从此页面了解当前的 Android 图形架构。旧版本的 Android 有很大的不同,但从一开始就在 Android 中存在双缓冲或三缓冲的概念。这在很大程度上是 OpenGL ES 工作方式的一部分。

应用程序方面的一个棘手问题是确定 VSYNC 何时到达,如果你想调整你的应用程序行为(而不是在队列填充时阻塞)。有关详细信息,请参阅文档的“游戏循环”部分,但要知道您可以使用Choreographer在 API 16+ 上获取 VSYNC 计时。

根据这个仪表板,Froyo 和更早的市场份额约为 0.7%。以姜饼和更高版本为目标更为典型。如果您以 API 16(第一个 Jellybean 版本)为目标,您现在将损失大约 25%(13.5% 姜饼,11.4% ICS),主要是由于其较低的硬件要求而附带姜饼的低端设备。

于 2014-08-04T14:37:17.067 回答