DirectFB代码导读

1557阅读 0评论2011-05-10 jhluroom
分类:LINUX

DirectFB是一个庞大的系统,对它进行彻底分析要花不少时间。幸好多数情况下,只要弄清楚它的基本架构,再重点读一些关键的代码,也就差不多了。前几个月为了完善DFB的窗口管理器,我花了一些时间去研究DFB的架构。把其中一些经验写到这里,供有兴趣的朋友参考。

 

总的说来,DFB由以下几部分组成:

1.         基本库函数。这部分代码在lib目录下,它分为三个部分:

 

2.         对第三方组件库的包装。这部分代码在interfaces目录下。Interfaces可能会引起别人的误解,因为它并不是DFB对外提供的接口,而是把第三方组件纳入DFB的接口。它包括三类:

3.         核心代码。这部分代码在src目录下。它可以分为两大类:

  1. CoreInitialize master进程初始化arena
  2. CoreJoin slave进程进入arena时的初始化。
  3. CoreShutdown master进程~初始化arena
  4. CoreLeaveslave进程离开arena时的~初始化。
  5. CoreSuspend:休眠,主要用于省电功能。
  6. CoreResume:唤醒,主要用于省电功能。

核心组件包括下面几个组件:

  1. dfb_core_clipboard: 剪切板。
  2. dfb_core_colorhash:调色板。
  3.   dfb_core_gfxcard:图形卡,主要完成基本的绘图功能,如绘直线、填充等等。
  4. dfb_core_input:输入设备。
  5. dfb_core_layers:分层功能,好像要硬件支持,通常都只有一个层。
  6. dfb_core_screens:逻辑屏幕(可能像X一样支持多个屏幕吧,不太清楚,有时间再研究)
  7. dfb_core_system:显示输出,把gfxcard绘制后的图形数据输出到屏幕上,即可以通过fbdev输出到本机屏幕上,也可以通过sdl/x11/vnc输出到远程主机的屏幕上。对于像sdl/x11等,也包括对输入事件的处理。
  8. dfb_core_wm:窗口管理器。

以上这些core_part,有的是直接实现的,比如clipboard。有的只是一层包装,具体的实现在一个独立的共享库中,在运行时通过参数来控制加载具体的实现,如system

 

  1. IDirectFBInputDevice: 输入设备
  2. IDirectFBScreen: 屏幕。
  3. IDirectFBSurface: 绘图表面。
  4. IDirectFBPalette: 调色板。
  5. IDirectFBFont: 字体
  6. IDirectFBImageProvider:图片
  7. IDirectFBVideoProvider:视频
  8. IDirectFBWindow:窗口
  9. DirectFBEventBuffer: 事件缓冲

4.         窗口管理器。这部分代码在wm目录下。DFB实现了两个窗口管理器。

 

5.         输入设备。这部分代码在inputdrivers目录下。其实这些代码并不是真正的驱动,只是一个adapter层,它把从linux设备文件读到的事件,转换成DFB自己的事件格式,然后调用dfb_input_dispatch把事件分发出去。

 

6.         输出设备。这部分代码在system目录下。这也是一个adapter层,主要对显示设备的抽象,有的也包括对输入事件的处理。其中包括:

7.         值得注意的几个问题:

上一篇:Android 应用程序快速启动的秘诀
下一篇:DirectFB 综述