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 被窗體系統用來生成構成重疊窗體的圖像。