0

到目前为止,据我所知,surfaceflinger 将表面提供给 APP 进行渲染,然后将所有表面合成到最终屏幕。(如有错误,请指出Thx)。

第一个问题:surfaceflinger 创建的表面是否是全局可用的,可以被所有进程使用。(表面的内存在GPU内存中吗?)

虽然我在谷歌上搜索,但无法在进程之间共享 openGL 上下文(这里我指的是 APP 进程和 surfaceflinger 进程)。我不确定表面使用的GPU内存是否如此?

如果我的第一个问题的答案是肯定的,那么当 APP 渲染到表面时,是否有任何 openGL 资源共享给 surfaceflinger?这些碎片,包括表面的记忆是如何工作的?

4

1 回答 1

0

SurfaceAndroid和 EGL之间存在差异Surface。它们密切相关,但不是一回事。

由方法创建的 EGL 表面eglCreateWindowSurface()可以与 EGL 上下文相关联并用作渲染目标。它们不能在进程之间共享。

Android Surfaces只是 BufferQueue 对象的包装器,它提供了一种在系统中移动图形缓冲区的方法。应用程序渲染到的缓冲区可以在应用程序和 SurfaceFlinger 之间传递,但不会传递任何 EGL 状态。SurfaceFlinger 得到的只是成品。

该系统在图形架构文档中有详细描述。

于 2015-04-28T05:17:44.170 回答