Chinaunix首页 | 论坛 | 博客
  • 博客访问: 183368
  • 博文数量: 63
  • 博客积分: 725
  • 博客等级: 军士长
  • 技术积分: 375
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-12 19:55
文章分类

全部博文(63)

文章存档

2012年(35)

2011年(28)

分类:

2012-02-21 23:51:49


一、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架构
   
 
阅读(993) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~