- 浏览: 199608 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
xumin_minzi:
我也在使用ndk编译,ffmpeg源码放在哪个目录里面?
[原创]Android ndkr8编译 FFmpeg 0.11.1 "Happiness" -
ericchan2012:
在Dialog调用show方法之后
【原创】Android 设置Dialog的长宽和位置 -
maohualei:
求解: 我设置的时候 位置居然没有反应 dial ...
【原创】Android 设置Dialog的长宽和位置
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
代码路径:
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
发表评论
-
Android锁屏的问题
2012-10-19 09:17 1308本文主要讨论Android锁屏的问题,具体有2个需求: 1、 ... -
android 修改开关机铃声
2012-10-18 16:52 18211,boot铃声,在surfaceflinger.cpp中re ... -
android输入法全屏问题
2012-10-18 15:18 1303两种方法: 一是在源码里进行修改。frameworks/bas ... -
android 解锁,锁屏流程
2012-10-16 15:36 6964解锁、锁屏界面状态改 ... -
android 从横屏到竖屏状态出现黑屏
2012-10-16 12:08 1776修改WindowManagerService.java中的pe ... -
android添加reboot选项
2012-10-13 15:33 14211,GlobalAction.java中mItems = Li ... -
手机硬件
2012-10-13 13:39 945转自http://bbs.meizu.com/thread-4 ... -
Android编译后的文件结构
2012-10-09 18:57 810Android编译完成后,将在根目录中生成一个out文件夹,所 ... -
framework下资源文件---自定义统一的系统风格
2012-09-26 17:46 11771.系统资源文件位置:framework/base/core/ ... -
Android系统默认值的设置
2012-09-26 09:25 11161开机图片: android-logo-mask.png ... -
android apk安装原理分析
2012-09-25 14:16 1703参考了网上的资料和源码,肤浅分析了下,不够深入。 An ... -
android 触屏反馈原理
2012-09-25 14:13 1749android中触屏反馈原理 HOPE mt6516 a ... -
Android下的系统Intent大全
2012-08-23 08:58 9121.从google搜索内容 Intent intent = n ... -
修改Android framework定制重启功能
2012-08-15 15:08 4193涉及到的源码(4.0) ics/frameworks/base ... -
Android makefile mk 重要参数解释及 通用模板编写
2012-08-10 09:04 16871. LOCAL_MODULE_TAGS解释: 控制此模块在什 ... -
手机的AP和BP是什么?
2012-08-06 15:56 1346手机的AP和BP根据上下文可以指代硬件和软件两种意思. 1) ... -
Android 上层界面到内核代码的完整的流程分析,以alarm为例子
2012-07-31 17:15 1281Alarm 调用流程,alarm的流程实现了从上层应用一直到下 ... -
彩信APN切换流程(framework)
2012-07-31 15:46 2013TransactionService之前的流程比较简单不在赘 ... -
我架设的程序员问答网站
2012-06-12 18:20 1123我架设了一个程序员问答网站,欢迎来http://program ... -
Android编译系统三
2012-06-15 10:33 1090android编译系统的makefile文件Android.m ...
相关推荐
Android 图形系统剖析 Android 立体效果图片 NDK动态库的调用 Android 姿态传感器 Android 很酷的图像旋转 Android 添加音频 在Android中实现多线程断点下载 Android提高篇内容整理 android移动开发案例精选 ...
余志龙、陈昱勋、郑名杰、陈小风,分别来自手机制造业、电视媒体业、网络、电信产业、软件开发等领域,擅长嵌入式系统软件设计、J2ME游戏开发、Android开发,以及12EE、JSP、Servlet、Java Bean、PHP、C#等程序语言...
余志龙、陈昱勋、郑名杰、陈小风,分别来自手机制造业、电视媒体业、网络、电信产业、软件开发等领域,擅长嵌入式系统软件设计、J2ME游戏开发、Android开发,以及12EE、JSP、Servlet、Java Bean、PHP、C#等程序语言...
余志龙、陈昱勋、郑名杰、陈小风,分别来自手机制造业、电视媒体业、网络、电信产业、软件开发等领域,擅长嵌入式系统软件设计、J2ME游戏开发、Android开发,以及12EE、JSP、Servlet、Java Bean、PHP、C#等程序语言...
余志龙、陈昱勋、郑名杰、陈小风,分别来自手机制造业、电视媒体业、网络、电信产业、软件开发等领域,擅长嵌入式系统软件设计、J2ME游戏开发、Android开发,以及12EE、JSP、Servlet、Java Bean、PHP、C#等程序语言...
来自好玩实验室的超想象力原创作品! 画聊可以让你的手机屏幕瞬间变成窗户,与另一侧的TA画画聊天……更多令人惊喜的神奇功能等待你来发现! V2.3.0版本更新说明: 1、增加远程钢琴功能。 2、邀请码...
欢迎订阅我的微信公众帐号,只推送原创文字。欢迎扫描二维码订阅: 参与交流 欢迎大家将珍藏已久的经典免费书籍共享出来,您可以: 使用 以及 Pull Request 贡献者名单: 目录 语言无关类 操作系统 (中英文版) (第三...
欢迎订阅我的微信公众帐号,只推送原创文字。欢迎扫描二维码订阅: 参与交流 欢迎大家将珍藏已久的经典免费书籍共享出来,您可以: 使用 以及 Pull Request 贡献者名单: 目录 语言无关类 操作系统 (中英文版) (第三...
欢迎订阅我的微信公众帐号,只推送原创文字。欢迎扫描二维码订阅: 参与交流 欢迎大家将珍藏已久的经典免费书籍共享出来,您可以: 使用 以及 Pull Request 贡献者名单: 目录 语言无关类 语言相关类 置顶 :hundred_...
欢迎订阅我的微信公众帐号,只推送原创文字。欢迎扫描二维码订阅: 参与交流 欢迎大家将珍藏已久的经典免费书籍共享出来,您可以: 使用 以及 Pull Request 贡献者名单: 目录 置顶 :hundred_points: :hundred_points...
欢迎订阅我的微信公众帐号,只推送原创文字。欢迎扫描二维码订阅: 参与交流 欢迎大家将珍藏已久的经典免费书籍共享出来,您可以: 使用 以及 Pull Request 贡献者名单: 目录 置顶 :hundred_points: :hundred_points...
欢迎订阅我的微信公众帐号,只推送原创文字。欢迎扫描二维码订阅: 参与交流 欢迎大家将珍藏已久的经典免费书籍共享出来,您可以: 使用 以及 Pull Request 贡献者名单: 目录 语言无关类 语言相关类 置顶 :hundred_...
欢迎订阅我的微信公众帐号,只推送原创文字。欢迎扫描二维码订阅: 参与交流 欢迎大家将珍藏已久的经典免费书籍共享出来,您可以: 使用 以及 Pull Request 贡献者名单: 目录 语言无关类 语言相关类 置顶 :hundred_...
欢迎订阅我的微信公众帐号,只推送原创文字。欢迎扫描二维码订阅: 参与交流 欢迎大家将珍藏已久的经典免费书籍共享出来,您可以: 使用 以及 Pull Request 贡献者名单: 目录 语言无关类 语言相关类 置顶 :hundred_...
欢迎订阅我的微信公众帐号,只推送原创文字。欢迎扫描二维码订阅: 参与交流 欢迎大家将珍藏已久的经典免费书籍共享出来,您可以: 使用 以及 Pull Request 贡献者名单: 目录 置顶 :hundred_points: :hundred_points...
欢迎订阅我的微信公众帐号,只推送原创文字。欢迎扫描二维码订阅: 参与交流 欢迎大家将珍藏已久的经典免费书籍共享出来,您可以: 使用 以及 Pull Request 贡献者名单: 目录 语言无关类 语言相关类 置顶 :hundred_...
欢迎订阅我的微信公众帐号,只推送原创文字。欢迎扫描二维码订阅: 参与交流 欢迎大家将珍藏已久的经典免费书籍共享出来,您可以: 使用 以及 Pull Request 贡献者名单: 目录 语言无关类 语言相关类 置顶 :hundred_...
欢迎订阅我的微信公众帐号,只推送原创文字。欢迎扫描二维码订阅: 参与交流 欢迎大家将珍藏已久的经典免费书籍共享出来,您可以: 使用 以及 Pull Request 贡献者名单: 目录 语言无关类 语言相关类 置顶 :hundred_...
欢迎订阅我的微信公众帐号,只推送原创文字。欢迎扫描二维码订阅: 参与交流 欢迎大家将珍藏已久的经典免费书籍共享出来,您可以: 使用 以及 Pull Request 贡献者名单: 目录 语言无关类 语言相关类 置顶 :hundred_...