Android Graphics -2 架构概述

3 篇文章 0 订阅
3 篇文章 0 订阅

Graphics 架构

摘要:Low-level 组件,High-level 组件

每个开发者都应该知道的关于Surface,SurfaceHolder,EGLSurface,SurfaceView,GLSurfaceVIew,SurfaceTexture,TextureView,SurfaceFlinger,and Vulkan。

本文描述了Android系统级(system-level)Graphics架构的基本元素,包括这个架构如何被framework和多媒体系统使用。我们将重点关注图形化的数据buffer如何在系统种被传输。如果你曾经想知道SurfaceView和TextureView的行为方式,或者Surface和EGLSurface的交互,那么你来对地方了。

假如你对Android device和app开发有一定的了解。其实你不需要特别详细的知道app framework,也很少提到API调用。但是这些材料与其他公共文件没有重叠。(笔者也看不懂这句话是什么意思,附上原文:Some familiarity with Android devices and application development is assumed. You don't need detailed knowledge of the app framework and very few API calls are mentioned, but the material doesn't overlap with other public documentation. The goal is to provide details on the significant events involved in rendering a frame for output to help you make informed choices when designing an application. To achieve this, we work from the bottom up, describing how the UI classes work rather than how they can be used.)

本文包含几页的内容,涵盖了所有从背景材料到HAL细节,乃至use cases。开头解释了Android graphics buffers,描述了合成和显示的机制,然后进入高层次(higher-level)的机制。建议按顺序阅读。

底层组件(Low-level components)

  • BufferQueue and gralloc. BufferQueue连接图像数据的生产者(producer)和数据的接收者(consumer)。Buffer分配通过gralloc内存配置器执行,内存分配器是由特定厂商的HAL接口来实现的。
  • SurfaceFlinger, Hardware Composer, and virtual displays. SurfaceFlinger从各种数据源接收数据,合成它们并且发送到Display。硬件合成器HAL(HWC)通过硬件来决定最有效的合成路径,虚拟显示器确保合成以后的数据在系统内部可用。
  • Surface, Canvas, and SurfaceHolder. 一个Surface对应一个buffer队列,通常,这个队列被SurfaceFlinger来消耗。当渲染一个Surface时,渲染结果会被发送到消费者的buffer中。画布(Canvas)API为直接绘制到surface提供软件实现(支持硬件加速),与视图有关的任何事情都涉及到一个surfaceholder,它的API支持获取和设置表面参数,如大小和格式。
  • EGLSurface and OpenGL ES. OpenGL ES(gles)定义了一个图形渲染API,该API设计为与egl(一个知道如何通过操作系统创建和访问窗口的库)结合使用(要绘制纹理多边形,使用gles调用;要在屏幕上进行渲染,使用egl调用)。此页还涵盖了ANativeWindow,等价于Java Surface 类,用于从native代码创建一个EGL窗口。
  • Vulkan. Vulkan一个高性能的低消耗,跨平台的3D Graphics API。就像OpenGL ES,Vulkan为创建高质量的,实时的图形提供工具。Vulkan优势还在于它可以减少CPU的负担并且支持SPIR-V Binary Intermediate 语言。

上层组件(High-level components)

  • SurfaceView and GLSurfaceView.SurfaceView由一个Surface和一个view组成。SurfaceView的View组件由SurfaceFlinger合成,在一个独立的线程中启动渲染,并且与app UI的渲染是隔离的。GLSurfaceView提供一个帮助类来管理EGL上下文,线程之间的通信和与Activity生命周期之间的交互。(但不需要使用GLES)
  • SurfaceTexture. SurfaceTexture结合了Surface和GLES纹理(texture)来创建BufferQueue,你的app就是BufferQueue的消费者。当生产者入队一个新的buffer时,它会通知你的app,而你的app会释放先前保存的buffer,然后从队列种获得新的buffer,同时进行EGL调用来使得buffer对GLES可见,作为一个外部texture。Android 7.0增加了对安全纹理视频播放的支持,支持对受保护视频内容进行GPU后处理。
  • TextureView. TextureView组合了一个View和一个SurfaceTexture。TextureView包装了一个SurfaceTexture,并负责响应回调和获取新的buffer。当开始绘制时,TextureView使用最新接收到的buffer的内容作为数据源,在view状态指示的任何位置任何时刻进行渲染。View通常使用GLES进行合成,这也意味着当更新内容时,会导致其他的View元素重新绘制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值