`

【原创】Android图形系统

 
阅读更多
Andriod图形系统采用的是client/server架构,server(即SurfaceFlinger)主要由c++编写,client端又分为两部分,一部分是由Java编写的应用程序接口,其中调用了一些native代码,就是由另一部分的c++来实现的,实现方式是jni调用。
代码路径:
framework/base/services/surfaceflinger/SurfaceFlinger.cpp
framework/base/core/java/android/view/Surface.java
framework/base/core/jni/android_view_Surface.cpp
frameworks/base/libs/ui/SurfaceComposerClient.cpp


每个view(每个viewgroup共享一个surface)都需要在一个surface上绘制,而surface又通过canvas(每个canvas对象对应一个bitmap)来控制view,就是控制在view上面来画图,每个surface又对应一个layer, 而最终每个surface又是链接到surfaceflinger这个server的,SurfaceFlinger负责将各个layer的front buffer合成(composite)绘制 到屏幕上,具体的底层工作由surfaceflinger这个服务来做,surfaceflinger做了一些3d的转换,以及显示,渲染等事情。
对于Framebuffer的访问:
直接 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中进行合成并显示。
Android 创建一个 Surface 的过程:



与图形相关的代码:
1. frameworks/base/graphics/java/android/graphics

2.frameworks/base/core/java/android/view

3.frameworks/base/core/java/android/widget

4.frameworks/base/opengl/

5.frameworks/base/libs/ui

6.frameworks/base/libs/surfaceflinger

7.frameworks/base/core/jni/android/graphics

8.frameworks/base/core/jni/android/opengl

9.frameworks/base/core/jni/android/android_view_*.cpp

10.external/skia

android.graphics, android.view和android.widget

1.frameworks/base/graphics/java/android/graphics

2.frameworks/base/core/java/android/view

3.frameworks/base/core/java/android/widget

android.graphics, android.view和android.widget
提供基本的图形原语(如画点画线,设置图形上下文等),事件机制,以及开发 图形用户界面 的控件 等。
canvas 用于开发2D图形, Surface 代表一个可供图形系统绘制的surface。可在其上绘制2D活3D图形。
opengl,3d库,参考http://developer.android.com/guide/topics/graphics/opengl.html
skia和cairo功能相当,封装底 层的图形硬件 ,为上面的图形库提供最基础的操作图形硬件的原语。
参考《淺談 Google Skia 圖形處理引擎》2和 《Android 的图形引擎 Skia》3

egl_native_window_t 定义了一个本地window类 。这个类提供了对本地window 的所有描述以及用于egl (opengl 与本地图形系统的接口)操作本地windwo的所有方法。
EGLNativeSurface是egl_native_window_t的一个派生类。
EGLDisplaySurface是EGLNativeSurface的派生类。 EGLDisplaySurface 是一个非常重要的类,在这个类里,真正打开framebuffer设备(/dev/graphics/fb0 或者/dev/fb0),并将这个设备封装成EGLDisplaySurface的形式供server使用。函数mapFrameBuffer打开framebuffer, 创建两个缓冲区,(一个是on screen front 缓冲区, 另一个back buffer, 可能位于offscreen framebuffer,也可能位于系统内存 )。函数swapBuffers将back buffer内容拷贝到front buffer中。

hardware/libhardware实现了HAL(Hardware Abstraction Layer)层,copybit device是其中一个模块

参考http://blog.csdn.net/dafeifly/article/details/4679853
http://blog.csdn.net/shenbin1430/article/details/4344897
  • 大小: 8.3 KB
  • 大小: 16.1 KB
分享到:
评论

相关推荐

    android开发资料大全

    Android 图形系统剖析 Android 立体效果图片 NDK动态库的调用 Android 姿态传感器 Android 很酷的图像旋转 Android 添加音频 在Android中实现多线程断点下载 Android提高篇内容整理 android移动开发案例精选 ...

    Google Android SDK开发范例大全(第3版) 1/5

    余志龙、陈昱勋、郑名杰、陈小风,分别来自手机制造业、电视媒体业、网络、电信产业、软件开发等领域,擅长嵌入式系统软件设计、J2ME游戏开发、Android开发,以及12EE、JSP、Servlet、Java Bean、PHP、C#等程序语言...

    Google Android SDK开发范例大全(第3版) 4/5

    余志龙、陈昱勋、郑名杰、陈小风,分别来自手机制造业、电视媒体业、网络、电信产业、软件开发等领域,擅长嵌入式系统软件设计、J2ME游戏开发、Android开发,以及12EE、JSP、Servlet、Java Bean、PHP、C#等程序语言...

    Google Android SDK开发范例大全(第3版) 3/5

    余志龙、陈昱勋、郑名杰、陈小风,分别来自手机制造业、电视媒体业、网络、电信产业、软件开发等领域,擅长嵌入式系统软件设计、J2ME游戏开发、Android开发,以及12EE、JSP、Servlet、Java Bean、PHP、C#等程序语言...

    Google Android SDK开发范例大全(第3版) 5/5

    余志龙、陈昱勋、郑名杰、陈小风,分别来自手机制造业、电视媒体业、网络、电信产业、软件开发等领域,擅长嵌入式系统软件设计、J2ME游戏开发、Android开发,以及12EE、JSP、Servlet、Java Bean、PHP、C#等程序语言...

    画聊涂鸦聊天交友 For Android v2.4.0.0.zip

    来自好玩实验室的超想象力原创作品!  画聊可以让你的手机屏幕瞬间变成窗户,与另一侧的TA画画聊天……更多令人惊喜的神奇功能等待你来发现!  V2.3.0版本更新说明:  1、增加远程钢琴功能。  2、邀请码...

    java版飞机大战源码-book:书

    欢迎订阅我的微信公众帐号,只推送原创文字。欢迎扫描二维码订阅: 参与交流 欢迎大家将珍藏已久的经典免费书籍共享出来,您可以: 使用 以及 Pull Request 贡献者名单: 目录 语言无关类 操作系统 (中英文版) (第三...

    亚信java笔试题-Books:图书

    欢迎订阅我的微信公众帐号,只推送原创文字。欢迎扫描二维码订阅: 参与交流 欢迎大家将珍藏已久的经典免费书籍共享出来,您可以: 使用 以及 Pull Request 贡献者名单: 目录 语言无关类 操作系统 (中英文版) (第三...

    java版飞机大战源码-free-programming-books:免费编程书籍

    欢迎订阅我的微信公众帐号,只推送原创文字。欢迎扫描二维码订阅: 参与交流 欢迎大家将珍藏已久的经典免费书籍共享出来,您可以: 使用 以及 Pull Request 贡献者名单: 目录 语言无关类 语言相关类 置顶 :hundred_...

    亚信java笔试题-web_books:web学习参考书籍

    欢迎订阅我的微信公众帐号,只推送原创文字。欢迎扫描二维码订阅: 参与交流 欢迎大家将珍藏已久的经典免费书籍共享出来,您可以: 使用 以及 Pull Request 贡献者名单: 目录 置顶 :hundred_points: :hundred_points...

    java版飞机大战源码-codeBook:密码本

    欢迎订阅我的微信公众帐号,只推送原创文字。欢迎扫描二维码订阅: 参与交流 欢迎大家将珍藏已久的经典免费书籍共享出来,您可以: 使用 以及 Pull Request 贡献者名单: 目录 置顶 :hundred_points: :hundred_points...

    java版飞机大战源码-shuji:https://github.com/justjavac/free-programming-books-z

    欢迎订阅我的微信公众帐号,只推送原创文字。欢迎扫描二维码订阅: 参与交流 欢迎大家将珍藏已久的经典免费书籍共享出来,您可以: 使用 以及 Pull Request 贡献者名单: 目录 语言无关类 语言相关类 置顶 :hundred_...

    java版飞机大战源码-Book:书

    欢迎订阅我的微信公众帐号,只推送原创文字。欢迎扫描二维码订阅: 参与交流 欢迎大家将珍藏已久的经典免费书籍共享出来,您可以: 使用 以及 Pull Request 贡献者名单: 目录 语言无关类 语言相关类 置顶 :hundred_...

    java版飞机大战源码-program-book:程序书

    欢迎订阅我的微信公众帐号,只推送原创文字。欢迎扫描二维码订阅: 参与交流 欢迎大家将珍藏已久的经典免费书籍共享出来,您可以: 使用 以及 Pull Request 贡献者名单: 目录 语言无关类 语言相关类 置顶 :hundred_...

    亚信java笔试题-books2:书2

    欢迎订阅我的微信公众帐号,只推送原创文字。欢迎扫描二维码订阅: 参与交流 欢迎大家将珍藏已久的经典免费书籍共享出来,您可以: 使用 以及 Pull Request 贡献者名单: 目录 置顶 :hundred_points: :hundred_points...

    java版飞机大战源码-free-programming-book:免费编程书

    欢迎订阅我的微信公众帐号,只推送原创文字。欢迎扫描二维码订阅: 参与交流 欢迎大家将珍藏已久的经典免费书籍共享出来,您可以: 使用 以及 Pull Request 贡献者名单: 目录 语言无关类 语言相关类 置顶 :hundred_...

    亚信java笔试题-justjavac-free-programming-books-zh_CN:justjavac-free-program

    欢迎订阅我的微信公众帐号,只推送原创文字。欢迎扫描二维码订阅: 参与交流 欢迎大家将珍藏已久的经典免费书籍共享出来,您可以: 使用 以及 Pull Request 贡献者名单: 目录 语言无关类 语言相关类 置顶 :hundred_...

    java版飞机大战源码-free-programming-books-zh_CN:free-programming-books-zh_CN

    欢迎订阅我的微信公众帐号,只推送原创文字。欢迎扫描二维码订阅: 参与交流 欢迎大家将珍藏已久的经典免费书籍共享出来,您可以: 使用 以及 Pull Request 贡献者名单: 目录 语言无关类 语言相关类 置顶 :hundred_...

    java版飞机大战源码-ProgrammingBooksCN:编程书籍CN

    欢迎订阅我的微信公众帐号,只推送原创文字。欢迎扫描二维码订阅: 参与交流 欢迎大家将珍藏已久的经典免费书籍共享出来,您可以: 使用 以及 Pull Request 贡献者名单: 目录 语言无关类 语言相关类 置顶 :hundred_...

Global site tag (gtag.js) - Google Analytics