DirectFB的目的是提供硬体图形加速,目标是提供高级图形运算包括多层alpha,具有矩形三角形填充/绘製的特性。
基本介绍
- 中文名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 被窗体系统用来生成构成重叠窗体的图像。