一、Display显示原理
Android的图形包主要包括android.graphics,android.view,android.widget和
android.opengl,前3个是用于2D的图形开发,基于SGL(Skia graphics library)。
android.opengl是用于3D的,基于OpenGL/ES。
Skia是一个开放源码的2D向量图形处理函数库,包含字型,坐标转换以及点阵图,有着高效且简洁的表
现,在Android平台中搭配OpenGL/ES与特定的硬件特征强化了显示效果。OpenGL/ES是OpenGL的一个
子集,是一个跨平台图形库,是专门为嵌入式系统而设计的。
Android图形系统的组成:
Application
| |
View/Widget/Canvas |
| |
SGL OpenGL/ES
|
Surface
Surface Manager
EGL
Frame Buffer
上层应用调用2D和3D图形库对Surface Manager提供的Surface进行绘制,通过Surface Manager的
合成器SurfaceFlinger对各个Surface进行合成,并由EGL接口实现在Framebuffer设备上的显示。
二、Android中的EGL接口
OpenGL/ES为附加功能和可能的平台特性开发了扩展机制,但仍然需要一个可以让OpenGL/ES和本地视
窗系统交互且平台无关的层。EGL是OpengGL/ES和底层Native平台视窗系统之间的接口,是为
OpenGL/ES提供平台设计独立性而设计。OpenGL/ES本质上是一个图形渲染管线的状态机,而EGL则是
用于监控这些状态以及维护Frame Buffer和其他渲染Surface的外部层。
在Android的底层源代码中,egl_native_window_t是一个提供了对本地窗口的所有定义以及用于EGL
操作本地窗口的所有方法的类。EGLNativeSurface派生自egl_native_window_t,
EGLDisplaySurface派生自EGLNativeSurface。EGLDisplaySurface通过mapFrameBuffer打开
Framebuffer设备,并创建两个缓冲区,函数swapbuffer把后台视频缓冲区复制到前台视频缓冲区。
DisplayHardware类中初始化了EGL,SurfaceFlinger使用了DisplayHardware去和本地窗口打交
道。
三、Dispaly架构
阅读(2531) | 评论(0) | 转发(1) |