DirectFB的目的是提供硬件圖形加速,目標(biāo)是提供高級(jí)圖形運(yùn)算包括多層alpha,具有矩形三角形填充/繪制的特性。

正文

DirectFB是一個(gè)輕量級(jí)的提供硬件圖形加速,輸入設(shè)備處理

特性

和抽象的圖形庫(kù),它集成了支持半透明的視窗系統(tǒng)以及在LinuxFramebuffer驅(qū)動(dòng)之上的多層顯示。它是一個(gè)用軟件封裝當(dāng)前硬件無(wú)法支持的圖形算法來(lái)完成硬件加速的層。DirectFB是為嵌入式系統(tǒng)而設(shè)計(jì)。它是以最小的資源開(kāi)銷來(lái)實(shí)現(xiàn)最高的硬件加速性能。

1.1目標(biāo)

最大限度的硬件加速

提供高級(jí)圖形運(yùn)算包括多層alpha顏色混合模式

利用現(xiàn)有標(biāo)準(zhǔn)無(wú)需改變內(nèi)核

不依賴于庫(kù)(除libc以外)

滿足HMP的需求

1.2特性

1.2.1圖形運(yùn)算

DirectFB支持以下圖形運(yùn)算。這些運(yùn)算可以由硬件來(lái)完成如果芯片組驅(qū)動(dòng)支持的話,或者有軟件封裝:

·矩形填充/繪制

·三角形填充/繪制

·畫(huà)線

·

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

·以一個(gè)恒定alpha混合因子進(jìn)行顏色混合(a.k.a. alpha modulation)

·九種不同的顏色混合函數(shù)對(duì)應(yīng)各個(gè)源和目標(biāo)來(lái)支持所有的端口

·色彩調(diào)制(a.k.a. color modulation)

·源色彩鍵

·目標(biāo)色彩鍵

1.2.2視窗系統(tǒng)

DirectFB集成了一個(gè)快速的支持半透明的視窗系統(tǒng)。窗體用了ARGB以像素為單位進(jìn)行顏色混合。并且每個(gè)窗體都有屬于自己的一個(gè)全局透明度。

1.2.3

資源管理器

DirectFB針對(duì)視頻存儲(chǔ)有自己的資源管理器。像顯示層輸入設(shè)備這樣的資源能被鎖定進(jìn)行互斥訪問(wèn)。例:全屏游戲,DirectFB能對(duì)像顯示層,窗體以及各種通用的surfaces這樣的圖形目標(biāo)提供抽象。從窗體切換到全屏以及返回到窗體的編程工作被最小化設(shè)置到所期望的合作級(jí)別。

1.2.4圖像

設(shè)備驅(qū)動(dòng)

對(duì)于硬件加速DirectFB使用了可載入的驅(qū)動(dòng)模塊。目前已支持以下芯片組:

· 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

其他芯片組也能工作,但是沒(méi)有硬件加速的支持。

1.2.5輸入設(shè)備

DirectFB支持以下輸入設(shè)備:

· 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體系結(jié)構(gòu)

2.1訪問(wèn)圖形硬件設(shè)備

DirectFB依靠?jī)?nèi)核中framebuffer驅(qū)動(dòng)(/dev/fb)所提供現(xiàn)有的接口來(lái)訪問(wèn)圖形硬件。這就意味著DirectFB必須要有一個(gè)能正常工作的framebuffer驅(qū)動(dòng)才能正常運(yùn)行。有些芯片組需要在linux內(nèi)核中有特定的framebuffer驅(qū)動(dòng)。對(duì)于那些沒(méi)有被支持的芯片組VESAframebuffer也能正常工作(但會(huì)有些限制)。不管圖形加速功能有沒(méi)有被用到,DirectFB都將用framebuffer驅(qū)動(dòng)來(lái)完成一下任務(wù):

·設(shè)置視頻模式(分辨率,色深,計(jì)時(shí))

·從framebuffer到卡的內(nèi)存映射

·framebuffer可視端口的改變(為雙緩沖)

當(dāng)一張卡被DirectFB所支持并且當(dāng)前有一個(gè)特定芯片組的framebuffer驅(qū)動(dòng)存在于linux內(nèi)核當(dāng)中,DirectFB將在上面提到的任務(wù)中額外的使用framebuffer驅(qū)動(dòng)來(lái)完成以下任務(wù):

·內(nèi)存映射到卡的內(nèi)存映射io端口

·關(guān)閉framebuffer驅(qū)動(dòng)內(nèi)部加速

當(dāng)執(zhí)行一個(gè)特殊的圖形運(yùn)算時(shí),DirectFB芯片組驅(qū)動(dòng)將訪問(wèn)圖形硬件的內(nèi)存映射 IO端口來(lái)提交命令給卡的加速引擎。這意味著,實(shí)際的硬件加速完成完全從用戶共享空間。

2.2通過(guò)DirectFB訪問(wèn)輸入設(shè)備

DirectFB使用linux內(nèi)核提供的標(biāo)準(zhǔn)設(shè)備接口來(lái)訪問(wèn)輸入設(shè)備。沒(méi)有一個(gè)輸入設(shè)備是直接被DirectFB.訪問(wèn)的。

2.3 DirectFB中的重要術(shù)語(yǔ)

2.3.1 Blitting

Blitting是在拷貝圖像數(shù)據(jù)的進(jìn)程中所引用。舉一個(gè)最簡(jiǎn)單的例子就是當(dāng)兩個(gè)Surface有相同的大,顏色深度和像素格式時(shí)Blitting其中一個(gè)Surface到另一個(gè)Surface。在這個(gè)過(guò)程中內(nèi)存只被復(fù)制而沒(méi)有被處理(就像復(fù)制其他任何類型的數(shù)據(jù)一樣)。???alpha通道的傳輸,或者從一種像素格式到另一種像素格式的傳輸。許多圖形顯卡包含了一個(gè)硬件Blitting來(lái)完成多種格式的傳輸。

2.3.2 Surface

Surface是內(nèi)存中一個(gè)圖像以一種具體的像素格式被保存的一塊保留區(qū)域。一個(gè)Surface可以位于視頻和/或系統(tǒng)內(nèi)存中??梢栽谝粋€(gè)Surface上進(jìn)行畫(huà)圖操作或者把一個(gè)Surface Blitting到另一個(gè)。(見(jiàn)1.21節(jié))

在全屏模式下時(shí),屏幕中的可視區(qū)表示為”主Surface”,所以可以直接在屏幕的可視區(qū)完成圖形操作。

每個(gè)Surface都可以選擇雙緩沖,圖形操作將首先在輔助緩沖區(qū)中執(zhí)行然后在Flip()被調(diào)用之后變得合法。在許多情況下建議在主Surface中使用雙緩沖來(lái)防止閃爍。

2.3.3 SubSurface

SubSurface使用和正規(guī)Surface相同的接口。它代表父類Surface的一個(gè)部分并且沒(méi)有為自己分配任何系統(tǒng)或視頻存儲(chǔ)空間。

2.3.4 Layer

依靠于圖形硬件可以有一個(gè)或者多個(gè)顯示層。一個(gè)標(biāo)準(zhǔn)的PC顯卡只有一個(gè)層,但是??就像機(jī)頂盒就可能支持2個(gè)或更多的層。不同的層在顯存中占據(jù)著不同的區(qū)域,通常通過(guò)alpha混合來(lái)組合,這由顯示硬件自動(dòng)完成。如果最底層的內(nèi)容發(fā)生了改變將不會(huì)被重繪,上一層的內(nèi)容保持不變。今天,許多PC顯卡也支持額外的可以縮放可以從YUV轉(zhuǎn)為RGB的層(視頻層)。這個(gè)層不能進(jìn)行顏色混合和設(shè)置成保持完全的不透明。variosDirectFB圖形驅(qū)動(dòng)支持視頻層。

2.3.5 Window / Windowstack

通常一個(gè)層的surface的內(nèi)容受控于集成的窗體系統(tǒng),這意味著屬于這個(gè)層的窗體在一個(gè)可配置的背景上。每個(gè)窗體有它自己的一個(gè) surface 這個(gè)surface 被窗體系統(tǒng)用來(lái)生成構(gòu)成重疊窗體的圖像。