6

我试图从系统集成商的角度来理解 Android (7) 图形系统。我的主要关注点是 libegl 需要提供的最小功能。

据我了解,surfaceflinger 是该领域的主要参与者。Surfaceflinger 初始化 EGL,创建实际的 EGL 表面并充当应用程序创建的缓冲区(帧)的消费者。该应用程序再次执行所需 GLES 调用的主要部分。显然,这会导致限制,因为 Surfaceflinger 和应用程序存在于不同的进程中,这不是 GLES/EGL 的典型用例。

我不明白的事情:

  • Android 7 上的应用程序是否总是渲染到发送到 surfaceflinger 的 EGL_KHR_image 缓冲区?这意味着总会有一个额外的复制步骤(即使不需要合成),据我所知......或者是否还有某种优化的全屏模式,应用程序直接渲染到最终的 EGL 表面?

  • 这里使用了哪些进程间共享机制?我的猜测是,与 EGL_NATIVE_BUFFER_ANDROID 一起使用的 EGL_KHR_image 定义了确切的二进制格式,以便可以在每个进程中创建一个图像对象,其中内存通过 ashmem 共享。这已经是完整/正确的图片还是我在这里错过了什么?

我想这些是我目前缺乏信心的主要观点。当然,我对此有一些后续问题(比如,gralloc/composition 如何适应这个?),但是,根据这个平台,我想尽可能地紧凑这个问题。尽管如此,除了主文档页面之外,我还缺少明确针对系统集成商的文档。因此,我们将不胜感激进一步的链接。

我目前的重点是典型的用例,这些用例将涵盖与 Android 7 兼容的绝大多数应用程序。如果存在诸如长期弃用的兼容性垫片之类的极端情况,我现在想忽略它们。

4

0 回答 0