我试图从系统集成商的角度了解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兼容的绝大多数应用程序。如果存在诸如长期不推荐使用的兼容性填充之类的极端情况,我现在暂时将其忽略。