Android图形架构实现分析总结 - shenbin1430的专栏 - CSDN博客

来源:百度文库 编辑:神马文学网 时间:2024/04/29 22:08:00
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 与特定的硬件特征,强化显示的效果。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/shenbin1430/archive/2009/07/13/4344897.aspx
Android图形架构实现分析总结 - shenbin1430的专栏 - CSDN博客 搭建Android环境 - shenbin1430的专栏 - CSDN博客 搭建Android环境 - shenbin1430的专栏 - CSDN博客 OpenMAX简介 - shenbin1430的专栏 - CSDN博客 Android flinger - simmer_ken的专栏 - CSDN博客 可变长度函数参数的原理及使用 - shenbin1430的专栏 - CSDN博客 Android的源代码结构 - 常青的专栏 - CSDN博客 Android PVPlayer介绍 - 常青的专栏 - CSDN博客 Android编译环境配置 - vrix的专栏 - CSDN博客 系统架构师的修炼 - welcomejzh的专栏 - CSDN博客 MPlayer往Android上的移植(1) - houdiney的专栏 - CSDN博客 Android:Google的阳谋和Apache Harmony - Kasmile的专栏 - CSDN博客 Linux-Android系统启动之INIT进程和system v init - guopeixin的专栏 - CSDN博客 Linux-Android启动之Init进程前传 - guopeixin的专栏 - CSDN博客 Android提高第一篇之MediaPlayer - hellogv的专栏 - CSDN博客 Boost::any分析 - 边缘程序员的专栏 - CSDN博客 什么是SWOT分析法? - 心如止水--coofucoo的专栏 - CSDN博客 x264源代码分析. - duduhaha的专栏 - CSDN博客 H26L encoder.cfg参数分析 - cc1983的专栏 - CSDN博客 说说大型高并发高负载网站的系统架构 - elimago的专栏 - CSDN博客 Android的PVPlayer介绍 CSDN博客 baozhengw的专栏 - CSDN博客 采用部分快速排序算法实现数组的部分排序 - eaglet的专栏 - CSDN博客 Oracle存储过程实现多线程对表数据的抽取 - 狮子尾巴的专栏 - CSDN博客