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
与特定的硬件特征,强化显示的效果。
总结其实现方案,主要包括了以下几个关键点:
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
向量图形处理函式库,包含字型、坐标转换,以及位图都有高效能且简洁的表现。它封装底层的图形硬件,为上面的图形库提供最基础的操作图形硬件的原语。不仅用于
Chrome
浏览器,
skia
作为绘图处理,搭配
OpenGL/ES
与特定的硬件特征,强化显示的效果。
相关文章推荐
- Android RIL架构分析——(1)本地库实现[c/cpp部分]
- ANDROID窗体管理服务实现机制和架构分析
- Android图形系统的分析与移植 -- 二、Android显示系统软件架构分析
- Android图形系统的分析与移植 -- 六、双缓冲framebuffer的实现
- Android IOS WebRTC 音视频开发总结(八十七)-- WebRTC中丢包重传NACK实现分析
- android快速构建应用“ui架构”代码分析总结
- MVP架构在Android平台上的实现分析(二)
- Android Binder设计与实现 - 设计篇(讲解binder数据结构及架构层面分析binder)
- MVP架构在Android平台上的实现分析
- 信息管理系统开发架构 配置实现列表展示分析图形及编辑等 构建信息分析展示平台 C#快速开发架构
- Android RIL架构分析——(1)本地库实现[c/cpp部分]
- Android IOS WebRTC 音视频开发总结(八十六)-- WebRTC中RTP/RTCP协议实现分析
- MVP架构在Android平台上的实现分析(三)
- ANDROID窗口管理服务实现机制和架构分析
- Android RIL架构分析——(1)本地库实现[c/cpp部分]
- Android LaunchMode 和ams的关系的分析和实现和讲解总结
- MVP架构在Android平台上的实现分析(一)
- ANDROID窗口管理服务实现机制和架构分析
- Android图形系统的分析与移植--七、双缓冲framebuffer的实现
- 结合Android源码分析总结单例模式的几种实现方式