Android 中 APP 和 surfaceflinger 之间的 OpenGL 上下文
OpenGL context between APP and surfaceflinger in Android
据我所知,surfaceflinger 提供程序将表面呈现给 APP 进行渲染,然后将所有表面合成到最终屏幕。 (如有错误请指出Thx)
第一个问题:surfaceflinger创建的surface是全局可用的,可以被所有进程使用。 (surface的内存是在GPU内存中吗?)
虽然我用谷歌搜索无法在进程之间共享 openGL 上下文(这里我指的是 APP 进程和 surfaceflinger 进程)。不知道surface使用的GPU显存是不是这样?
如果我的第一个问题的答案是肯定的,那么当APP渲染到surface时,surfaceflinger是否有任何openGL资源共享?
还有这些碎片包括地表记忆是怎么运作的?
Android Surface
和 EGL Surface
之间存在差异。它们密切相关,但不是一回事。
通过 eglCreateWindowSurface()
等方法创建的 EGL 表面可以与 EGL 上下文相关联并用作渲染目标。它们不能在进程之间共享。
Android Surfaces 只是 BufferQueue 对象的包装器,它提供了一种在系统中移动图形缓冲区的方法。应用程序渲染到的缓冲区可以在应用程序和 SurfaceFlinger 之间传递,但 EGL 状态的 none 会被传递。 SurfaceFlinger 拿到的都是成品。
中对系统进行了一些详细描述
据我所知,surfaceflinger 提供程序将表面呈现给 APP 进行渲染,然后将所有表面合成到最终屏幕。 (如有错误请指出Thx)
第一个问题:surfaceflinger创建的surface是全局可用的,可以被所有进程使用。 (surface的内存是在GPU内存中吗?)
虽然我用谷歌搜索无法在进程之间共享 openGL 上下文(这里我指的是 APP 进程和 surfaceflinger 进程)。不知道surface使用的GPU显存是不是这样?
如果我的第一个问题的答案是肯定的,那么当APP渲染到surface时,surfaceflinger是否有任何openGL资源共享? 还有这些碎片包括地表记忆是怎么运作的?
Android Surface
和 EGL Surface
之间存在差异。它们密切相关,但不是一回事。
通过 eglCreateWindowSurface()
等方法创建的 EGL 表面可以与 EGL 上下文相关联并用作渲染目标。它们不能在进程之间共享。
Android Surfaces 只是 BufferQueue 对象的包装器,它提供了一种在系统中移动图形缓冲区的方法。应用程序渲染到的缓冲区可以在应用程序和 SurfaceFlinger 之间传递,但 EGL 状态的 none 会被传递。 SurfaceFlinger 拿到的都是成品。
中对系统进行了一些详细描述