Android图形架构分析总结

本文分析了Android图形架构的关键实现方案,包括直接访问FrameBuffer、利用OpenGL进行硬件加速、图像显示裁剪及局部刷新机制、易用的图形原语和控件、以及强大的2D图形引擎库Skia。

时间:2010-05-15 15:59 来源:未知 作者:admin 点击:260次
总结其实现方案,主要包括了以下几个关键点: 1 、直接 FrameBuffer 的访问方式,并对 FrameBuffer 采用双缓存技术 没有采用X-Server等方案,直接操作framebuffer,可以减少X-Server带来的通信开

总结其实现方案,主要包括了以下几个关键点:

1、直接FrameBuffer的访问方式,并对FrameBuffer采用双缓存技术

没有采用X-Server等方案,直接操作framebuffer,可以减少X-Server带来的通信开销。打开framebuffer, 创建两个缓冲区,(一个是on screen front buffer, 另一个back buffer, 可能位于offscreen framebuffer,也可能位于系统内存)。 源代码中函数swapBuffers将back buffer内容拷贝到front buffer中。双缓存技术使得可以在back buffer中进行绘制,随后拷贝到front buffer中进行合成并显示。

2、充分利用OpenGL的图形接口和硬件加速功能

通过OpenGL的API,Android能够提供高性能的3D图像。OpenGL的EGL接口,是OpenGL ES和底层Native平台视窗系统之间的接口。

3、图像显示的裁剪以及局部刷新机制

多个Layer被定义成一个层向量LayerVector,它包含了当前所有Surface对应的layer,SurfaceFlinger根据每个layer的Z-order把多个层组合为一个最终在屏幕上显示的buffer。

Z-order:Z序实际定义了窗口之间的层叠顺序。说起“Z序”这个名称,实际是相对屏幕坐标而言的。一般而言,屏幕上的所有窗口均有一个坐标系,即原点在左上角,X轴水平向右,Y轴垂直向下的坐标系。Z序就是相对于一个假想的Z轴而言的,这个Z轴从屏幕外指向屏幕内。窗口在这个Z轴上的值,就确定了其Z序。Z序值大的窗口,覆盖了Z序值小的窗口。

在层向量里每个层都对应一个Z序值,同时通过给层设定优先级的方式,使得某些层可以实现前端显示,最后通过相应的裁剪算法来计算可以被显示的区域。

优化的重绘机制:采用局部刷新机制,并不是每次repaint都需要重绘整个屏幕,首先计算需要重绘的区域(mInvalidRegion),如果DisplayHardware::UPDATE_ON_DEMAND,则通过设定需要重绘的区域的边界来进行局部重绘。

4、简单易用的图形原语、事件机制和控件

android.graphics, android.view和android.widget功能和其他类似的图形库如Qt/Gtk+差不多,分别提供基本的图形原语(如画点画线,设置图形上下文等),事件机制,以及开发图形用户界面的控件等。

5、功能强大的2D图形引擎库

Skia是个2D向量图形处理函式库,包含字型、坐标转换,以及位图都有高效能且简洁的表现。它封装底层的图形硬件,为上面的图形库提供最基础的操作图形硬件的原语。不仅用于Google Chrome浏览器,skia作为绘图处理,搭配OpenGL/ES与特定的硬件特征,强化显示的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值