您的位置:首页 > 运维架构 > 网站架构

Android图形系统-架构

2015-12-29 11:59 633 查看
图形架构

这部分阐述了一些开发者需要知道的和Surface,SurfaceHolder,EGLSurface,SurfaceView,GLSurfaceView,SurfaceTexture,TextureView和SurfaceFlinger相关的知识。

本文档描述了Android系统级别图形框架的基本元素,以及如何在应用和多媒体系统中使用这些元素。焦点在于图像数据的buffer如何在系统中传递。如果你对SurfaceView和TextureView的行为或者Surface与EGLSurface的交互比较疑惑,那么你需要了解这一部分。

假设Android设备(开发)和应用开发之间有相似的地方。你不需要详细了解应用框架,并且只需要少量ApI调用就可以了,但是这里提到的资料与其他公开的文档并无重合。这里的目的是提供一个对于参与输出的渲染帧所包含的重要事件的认识,以使你在设计一个应用的时候可以做出明智的选择。为了达到这个目的,我们将从下往上描述UI类是何如工作的,而非其是如何被使用的。

(就是说这部分描述的是图像系统的工作原理,而不是图像类的使用)

这一部分前面段落提到的知识将作为后面部分的背景知识,因此推荐按顺序阅读这一部分,而不是看到有意思的部分直接跳过去。我们将从Android 图形buffer开始,描述其合成和显示机制,然后推进到数据合成的高级机制讲解中。

这部分主要概念基于Android4.4版本(kitkat),早期版本工作方式不同,将来的版本也可能会有不同。所以指定版本相关的特性会在某些地方标识出来。

BufferQueue and gralloc

为了了解Android图形系统是如何工作的,我们需要从场景入手。Android中一切图像相关事物的核心是一个BufferQueue的类。它充当的角色很简单:对产生图像数据Buffer(生产者)和接收显示及进一步处理数据(消费者)的对象进行连接。生产者和消费者可以在不同进程中。几乎一切通过系统来传递buffer以传递图像数据的事物都依赖于BufferQueue。

BufferQueue的基本用例很简单。生产者请求一个空闲的buffer(dequeueBuffer()),并制定一系列的特性,诸如宽度,高度,像素格式和使用标识。生产者填充这个buffer并将其放入队列(queueBuffer()).一段时间之后,消费者就会请求这个buffer(acquireBuffer())并且使用Buffer中的内容。当消费者完成操作之后,会将buffer返还给队列(releaseBuffer()).

现在多数的Android设备爱都会支持所谓的“sync framwork”。允许系统结合硬件组件异步操作图形数据来做一些漂亮的事情。比如,一个生产者可以提交一系列的OpenGL ES绘画命令然后在渲染工作完成之前将输出buffer放进队列。buffer内容准备好的时候会伴随一个信号栅栏,buffer被返回给空闲列表的时候会伴随另一个信号栅栏,所以消费者可以在buffer内容尚在使用的时候释放这个buffer。这样就提高了buffer在系统中传递时的延迟和吞吐量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: