引 言 DirectFB 是一个提供硬件图形加速、输入设备处理抽象并集成了透明功能窗体系统和 多显示层处理的开源库。通过对底层硬件不支持的图形操作以回调函数实现,DirectFB 实 现硬件设备的完全抽象。另外 DirectFB 在
设计之初就充分考虑嵌入式系统的固有特性,体 积小巧,资源消耗低。作为嵌入式系统中强大的图形处理库,DirectFB 成为 Linux 下图形 处理的一个新的标准(CELF AVG 1.0标准)。 使用 DirectFB 可以绕开 X Window 系统,让应用程序直接操作 Frame. Buffer,从而加 速和简化图形操作。 这对于嵌入式系统是很重要的, 因为在资源有限的嵌入式系统中通常没 有运行 X Window。当然,DirectFB 可以采用 XDirectFB 来开发,这样原来基于 X Window 开发的
程序不需要修改就可以运行起来。 DirectFB 采用的是 LGPL 协议,因而可做商用开发库。LinuxTV、Palm Foleo 等移动公 司的项目均采用 DirectFB 作为底层图形库。 值得一提的是,考虑跨平台、多语言等特定需求,开发者可以选择以 DirectFB 为后端 的 Cairo 图形库进行2D 图形操作。实践证明,这是一种嵌入式系统中高效、通用的解决方 案。 本文在介绍 DirectFB 相关特性之后,通过实例说明了其在嵌入式
系统中的开发方法, 并对基于 DirectFB 的 Cairo 图形库的使用关键点作了相关介绍。 1 轻量级图形处理库 DirectFB DirectFB 提供了丰富的图形操作方法,而且所有操作在芯片支持的前提下均可进行硬 件加速。例如:矩形和三角形绘制和填充、BLIT、Porter/Duff 规则混色等。Di—reetFB 内部集成了一个简易的窗口系统, 支持透明窗体。 显示层和输入设备等资源可以通过加锁的 方式访问。DirectFB 对任何通用表面(surface)都提供了抽象,这使得窗口和全屏之间的切 换只需要简单的设置合作级别即可。 1.1 DirectFB 整体框图介绍 DirectFB 通过操作系统中 FrAME. Buffer 驱动程序提供的内核接口来访问图形硬件设 备,这意味着 DirectFB 需要 Frame. Buffer 驱动才可以工作。无论是否使用硬件加速, DirectFB 都需要驱动完成设置分辨率、色深等视频模式,映射 Frame. Buffer 等操作。对 于特定的图形操作,DirectFB 通过访问图形硬件的内存映射端口,提交命令给显卡加速引 擎来实现。其整体框架如图1所示。
1.2 DirectFB 接口框架 DirectFB 提供了一套 C 接口给用户调用 DirectFB 的各项功能。在 DirectFB 中,接口 实质上是一个结构体, 结构体中包含了功能函数指针, 不同接口的函数指针指向不同的核心 函数。比如 IDireetFBSurface 接口代表屏幕中可操作的区块,其中封装了 BLIT、画框、画 线和 FLIP 等核心操作。 其中 IDirectFB 是整个库的顶层接口,可以通过 DirectFBCreate 函
数来创建,其他接 口可以通过这个接口创建。所有存在的接口也可以通过它来枚举访问。图2展示了 DireetFB 的接口框架。
表1对主要接口模块的功能作了简单说明。具体的操作可以查看 DirectFB*****的相关 帮助
文档。
2 DirectFB 应用开发 下面通过一个例子说明使用 DirectFB 接口的开发方法:
上面几行代码分别声明了 DirectFB 的主接口、显示层接口、窗口接口、绘图表面接口 和消息缓冲接口。然后通过下列代码对 DirectFB 和它的接口进行初始化:
一旦接口创建完毕,即可调用接口的相关方法实现 DirectFB 的提供图形操作功能。比 如,下面的代码实现了在窗体的绘图表面绘制矩形框的操作:
值得一提的是 DirectFB 实现了消息系统,用以响应用户输入、键盘鼠标等事件。对于 嵌入式系统,DirectFB 支持 tslib 方式接口的触摸屏输入消息响应。 3 以 DirectFB 为后端的2D 图形处理 考虑以跨平台输出,引入2D 图形处理库 Cairo。令 Cairo 以 DirectFB 为实际绘图后端 (back end)的方案,在嵌入式系统中可以获得很好的性能以及极大的通用性。
Cairo 广泛地