DirectFB的目的是提供硬件图形加速,目标是提供高级图形运算包括多层alpha,具有矩形三角形填充/绘制的特性。

正文

DirectFB是一个轻量级的提供硬件图形加速,输入设备处理

特性

和抽象的图形库,它集成了支持半透明的视窗系统以及在LinuxFramebuffer驱动之上的多层显示。它是一个用软件封装当前硬件无法支持的图形算法来完成硬件加速的层。DirectFB是为嵌入式系统而设计。它是以最小的资源开销来实现最高的硬件加速性能。

1.1目标

最大限度的硬件加速

提供高级图形运算包括多层alpha颜色混合模式

利用现有标准无需改变内核

不依赖于库(除libc以外)

满足HMP的需求

1.2特性

1.2.1图形运算

DirectFB支持以下图形运算。这些运算可以由硬件来完成如果芯片组驱动支持的话,或者有软件封装:

·矩形填充/绘制

·三角形填充/绘制

·画线

·

·alpha颜色混合(a.k.a. texture alpha)

·以一个恒定alpha混合因子进行颜色混合(a.k.a. alpha modulation)

·九种不同的颜色混合函数对应各个源和目标来支持所有的端口

·色彩调制(a.k.a. color modulation)

·源色彩键

·目标色彩键

1.2.2视窗系统

DirectFB集成了一个快速的支持半透明的视窗系统。窗体用了ARGB以像素为单位进行颜色混合。并且每个窗体都有属于自己的一个全局透明度。

1.2.3

资源管理器

DirectFB针对视频存储有自己的资源管理器。像显示层输入设备这样的资源能被锁定进行互斥访问。例:全屏游戏,DirectFB能对像显示层,窗体以及各种通用的surfaces这样的图形目标提供抽象。从窗体切换到全屏以及返回到窗体的编程工作被最小化设置到所期望的合作级别。

1.2.4图像

设备驱动

对于硬件加速DirectFB使用了可载入的驱动模块。目前已支持以下芯片组:

· Matrox Mystique/Millenium, G100, G200, G400/G450, G550

· Via CLE266

· ATI mach64/Rage Pro series

· ATI Rage 128

· ATI Radeon

· 3dfx Voodoo3/4/5/Banshee

· igs CyberPro 5xxx

· S3 Savage 3/4 series

· NeoMagic 220/2230/2360/2380

· nVidia TNT/GeForce series

· SiS 315

· Intel i810

· NSC Geode

其他芯片组也能工作,但是没有硬件加速的支持。

1.2.5输入设备

DirectFB支持以下输入设备:

· standard keyboards

· serial and PS/2 mice

· joysticks

· devices using the linux input layer

· infrared remote controls (using lirc)

· iPAQ touchscreen

· ucb 1x00 touchscreen

· Microtouch touchscreen

· Sony PI Jogdial

直接查询硬件或者使用事件缓冲器也是有可能的。

1.2.6加载图像

DirectFB支持以下图像格式,这些格式可以直接加载到DirectFB surfaces :

· JPEG (using libjpeg)

· PNG (using libpng2)

· GIF (integrated, no library required)

· various other image formats (using Imlib2)

1.2.7视频回放

DirectFB支持以下视频格式,这些视频格式可以直接绘制到DirectFB surfaces:

· video4linux (/dev/video)

· mpeg1/2 (using libmpeg3)

· AVI (using avifile)

· MOV (using OpenQuicktime)

· macromedia flash (using libflash)

1.2.8 字体渲染

DirectFB 支持反锯齿文本绘制以及字体支持,它支持以下字体格式:

· DirectFB bitmap font

· TrueType (using FreeType2)

2 DirectFB体系结构

2.1访问图形硬件设备

DirectFB依靠内核中framebuffer驱动(/dev/fb)所提供现有的接口来访问图形硬件。这就意味着DirectFB必须要有一个能正常工作的framebuffer驱动才能正常运行。有些芯片组需要在linux内核中有特定的framebuffer驱动。对于那些没有被支持的芯片组VESAframebuffer也能正常工作(但会有些限制)。不管图形加速功能有没有被用到,DirectFB都将用framebuffer驱动来完成一下任务:

·设置视频模式(分辨率,色深,计时)

·从framebuffer到卡的内存映射

·framebuffer可视端口的改变(为双缓冲)

当一张卡被DirectFB所支持并且当前有一个特定芯片组的framebuffer驱动存在于linux内核当中,DirectFB将在上面提到的任务中额外的使用framebuffer驱动来完成以下任务:

·内存映射到卡的内存映射io端口

·关闭framebuffer驱动内部加速

当执行一个特殊的图形运算时,DirectFB芯片组驱动将访问图形硬件的内存映射 IO端口来提交命令给卡的加速引擎。这意味着,实际的硬件加速完成完全从用户共享空间。

2.2通过DirectFB访问输入设备

DirectFB使用linux内核提供的标准设备接口来访问输入设备。没有一个输入设备是直接被DirectFB.访问的。

2.3 DirectFB中的重要术语

2.3.1 Blitting

Blitting是在拷贝图像数据的进程中所引用。举一个最简单的例子就是当两个Surface有相同的大,颜色深度和像素格式时Blitting其中一个Surface到另一个Surface。在这个过程中内存只被复制而没有被处理(就像复制其他任何类型的数据一样)。???alpha通道的传输,或者从一种像素格式到另一种像素格式的传输。许多图形显卡包含了一个硬件Blitting来完成多种格式的传输。

2.3.2 Surface

Surface是内存中一个图像以一种具体的像素格式被保存的一块保留区域。一个Surface可以位于视频和/或系统内存中。可以在一个Surface上进行画图操作或者把一个Surface Blitting到另一个。(见1.21节)

在全屏模式下时,屏幕中的可视区表示为”主Surface”,所以可以直接在屏幕的可视区完成图形操作。

每个Surface都可以选择双缓冲,图形操作将首先在辅助缓冲区中执行然后在Flip()被调用之后变得合法。在许多情况下建议在主Surface中使用双缓冲来防止闪烁。

2.3.3 SubSurface

SubSurface使用和正规Surface相同的接口。它代表父类Surface的一个部分并且没有为自己分配任何系统或视频存储空间。

2.3.4 Layer

依靠于图形硬件可以有一个或者多个显示层。一个标准的PC显卡只有一个层,但是??就像机顶盒就可能支持2个或更多的层。不同的层在显存中占据着不同的区域,通常通过alpha混合来组合,这由显示硬件自动完成。如果最底层的内容发生了改变将不会被重绘,上一层的内容保持不变。今天,许多PC显卡也支持额外的可以缩放可以从YUV转为RGB的层(视频层)。这个层不能进行颜色混合和设置成保持完全的不透明。variosDirectFB图形驱动支持视频层。

2.3.5 Window / Windowstack

通常一个层的surface的内容受控于集成的窗体系统,这意味着属于这个层的窗体在一个可配置的背景上。每个窗体有它自己的一个 surface 这个surface 被窗体系统用来生成构成重叠窗体的图像。