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

Android图形架构实现分析总结

2009-07-13 16:36 435 查看
Android图形架构分析总结

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

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

与特定的硬件特征,强化显示的效果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: