directfb之diretfbrc詳解


directfbrc 是DirectFB的配置文件。它被所有的DirectFB應用程序在啓動時讀取,有兩個這樣的文件,一個是存放在/etc/direcfbrc,是個全 局的,另一個是存放在$HOME/.directfbrc,它是個局部的,可以覆蓋系統的設置。

需要注意的是,這兩個文件都不是默認存在 的,是需要你自己建立的,不要象我一樣,剛開始的時候到處找也沒有找到,呵呵。

在directfbrc使用的參數也可以在命令行裏傳遞給 DirectFB應用程序,只需要加上前綴:--dfb:



相關語法:

directfbrc文件每一行包 含一個變量。註釋行以井號“#”開始,一直到行尾。空行被忽略。

許多參數只是一種開關,控制着一些特性的開/關。這些開關選項有一個 no-變量,可以關閉相應的特性。下面介紹一些實用的參數和一些默認的參數。



參數:

以下參數可以在 directfbrc文件中設定

system=

設定使用的圖形系統。默認使用Linux frame buffer (fbdev),但你也可以在SDL(sdl)上運行DirectFB應用程序。其它的系統在將來可能會被擴展近來。

fbdev=

打 開指定的frame buffer 設備,而不是默認的/dev/fb0。

mode=x

設 定默認的屏幕顯示。如果不設定,DirectFB 將使用/etc/fb.modes 的第一個設定值。一些frame buffer 設備(如 vesafb) 不支持模式切換,而只能使用啓動時設定的值。

depth=

使用二 進制位數設置每像素默認的像素深度。如果沒有指定,DirectFB將使用/etc/fb.modes 裏面的第一個指定的深度值。DirectFB 支持8, 15, 16, 24 和32位的顏色深度(color depths),這些值依賴於你使用的frame buffer設備是否支持。一些frame buffer 設備(如: vesafb) 根本就不支持模式切換,只能使用在啓動時設定的像素深度值。

pixelformat=

設 置默認的像素格式。和上面描述的深度參數類似但允許更精細的控制。Pixelformat的值可以爲LUT8, RGB332, RGB16, RGB24和RGB32。一些設備可能還支持更奇怪的A8, ALUT44, ARGB, ARGB1555, I420, UYVY, YUY2 和YV12像素格式。

session=

選擇被添加或創建的多應用程序。開始爲0,如果強行設置爲 負值,則使用一個可用的最小值。設定的值將覆蓋環境變量“DIRECTFB_SESSION”的值。

primary-layer=

選 定哪一個層爲“主層”(primary layer),默認的是第一個。查看‘dfbinfo’可以找到你的硬件支持的層列表。

tmpfs=

使 用給定的文件夾(tmpfs掛載點)來多應用程序模式下創建共享內存文件。這個選項只在自動檢測失敗或者渴望非tmpfs存儲時纔有用。

memcpy=

使 用這個選項,對memcpy()程序(routines)的探測會被忽略,節省了不少啓動時間。傳遞“help”參數可以看到一系列的可能值。

quiet

禁 止從DirectFB 控制檯(console)輸出。只顯示錯誤信息。

[no-]banner

啓動時使輸出 DirectFB 標誌(banner)有效。默認有效。

[no-]debug

使debug輸出有效。默認有效,但是除 非你編譯DirectFB 時支持debug選項,否則,你不會不看到任何錯誤輸出。

force-windowed

強制 主表面(primary surface)爲一個窗口。這樣可以使設計成全屏顯示的應用程序在一個窗口上運行。

force-desktop

強 制使主表面(primary surface)成爲桌面的後臺表面(background surface)。

[no-]hardware

置 硬件加速爲有效。默認會自動探測硬件加速。如果你置它爲無效,則顯卡驅動雖然也會被加載並可以訪問其它的顯示層(如果有的話),但是,所有的圖形操作將被 軟件來渲染(renderer)。

[no-]sync

初始化DirectFB 之前清空所有的硬盤緩衝區(disk buffers) 。當你工作環境爲實驗性的設備驅動和預計會出現衝突(crashes)時比較有用。默認此功能爲無效。

[no-]mmx

選 相no-mmx使得即使檢測到有MMX的支持也不能使用MMX程序(routines)。如果提供了MMX並在編譯時加入了MMX的支持,默認該選相有 效。

[no-]argb-font

向ARGB面載入字的輪廓(glyphs),而不是使用A8面(alpha masks)。該設置使用了更多的內存,但是一些顯卡在使用A8面時會出現一些詭異現象。如果你的字體看起來比較奇怪,試試該選項。

[no-]a1-font

向 A1平面載入字的輪廓(glyphs),而不是使用A8平面(alpha masks)。如果圖形驅動不支持彩色+混合平移(blit,譯者注,blit此處翻譯成平移,具體的含義見附錄),該選項可以加速字體渲染,但會影響質 量。一般情況下你根本不需要使用該選項,因爲基於A8字體的軟件已經是高度優化和足夠快了。

[no-]sighandler

默 認情況下,DirectFB 爲一些信號量(signal)安裝了一個可以使應用程序退出的信號量句柄(handler)。這個信號量句柄試圖在退出應用程序前解除初始化的 DirectFB 引擎。使用該選項可以開/關此特性。

dont-catch=[[,]...]

和 上面對sighandler 選項描述類似。使用該選項你可以對不能使用該方式被處理的信號量列出一個詳細的清單。

[no-]deinit-check

默 認情況下,DirectFB在退出時會檢查所有已釋放所分配的資源,如果沒有,它將在應用程序退出後釋放之。該選項可以開/關此功能。

block-all-signals

該 選項可以阻塞所有的信號量,對DirectFB daemons 有用(DirectFB master應用程序除了是一個master外,什麼也不做)。

[no-]vt-switch

默認情況 下,DirectFB會分配一個新的虛擬終端並轉向使用它。

[no-]vt-switching

可以使 用++來切換虛擬終端。這是一個實驗特性,經常無效,你看着辦吧。

[no-]graphics-vt

使 虛擬終端轉爲圖形模式。有如下優點:當DirectFB 應用程序運行時,內核的消息不會在屏幕上顯示。

[no-]motion-compression

DirectFB 常常壓縮(compresse)鼠標移動事件。也就是說,一系列的鼠標移動事件被看作一個簡單的鼠標移動事件。這樣可以達到更快的響應但是鼠標處理的精確 度會受到影響。

mouse-protocol=

爲一個串口鼠標指定使用的協議。以下的 協議被支持:

MS 使用微軟鼠標協議的兩個按鈕的鼠標;

MS3使用擴展的微軟鼠標協議的三按鈕鼠標;

MouseMan 使用一種Logitech開發的另一種擴展的微軟鼠標協議的三按鈕的鼠標;

MouseSystems 廣泛使用的三按鈕鼠標。

串 口鼠標所使用的協議的詳細信息可參考相關資料。

[no-]lefty

切換鼠標左右按鍵,對“左撇子”(:lol:)比較有 用。

[no-]capslock-meta

把CapsLock 鍵映射到Meta。對建在WM的用戶有用,因爲鍵盤上沒有Meta鍵(例如Window 鍵)。

[no-]cursor

默 認情況下,DirectFB 在使用窗口時顯示一個鼠標箭頭。該選項允許徹底關閉鼠標箭頭。即使在應用程序裏也不能讓它再出現。

disable-module=

禁 止該模塊的載入。模塊的名字爲文件名,但不能帶有libdirectfb 前綴也不能是其擴展(例如,若文件名爲keyboard,則鍵盤輸入模塊載入被禁止)。

bg-none

使背景處理完全無 效。不要設置給選項,否則鼠標和窗口移動時會在背景留下難看的痕跡。

bg-color=AARRGGBB

控制背景的顏 色。顏色的值爲十六進制值。默認的alpha值爲完全不透明並可能被忽略。例如,設定背景色爲紅紫色(magenta),可以使用bg- color=FF00FF。

bg-image=

使用給定的文件中的圖象充填背景。圖象 會被伸縮(stretch)以適應屏幕的尺寸。

bg-tile=

類似bg- image,這裏使用圖象的圖快(tile)方式在屏幕的尺寸顯示,而不是伸縮方式。

[no-]translucent-windows

默 認情況下,DirectFB 窗口可能是半透明的。如果你使該選項無效,則窗口會被強制爲完全不透明或者是全透明。當你的顯卡不支持alpha 半透明圖快(alpha-transparent blit)時,該選項比較有用。

videoram-limit=

限 制DirectFB 使用的視頻RAM。視頻RAM大小的單位爲K字節數。

matrox-tv-standard=[pal|ntsc]

控 制由Matrox 卡的TV輸出產生的信號。

[no-]matrox-sgram

一些老的Matrox G400 卡有SGRAM 並且如果設定該選項,一些圖形操作在這些卡上執行相當快。如果你的卡上沒有SGRAM,不要試圖選中該選項,否則,你不得不重起。

[no-]matrox-crtc2

如 果你有個雙重的head G400/G450/G550,你可是使用該選項利用第二個head驅動附加層。

screenshot-dir=

如 果選定該選項,當你按下 鍵,DirectFB 將把屏幕的內容以PPM格式放到這個指定的目錄。

window-surface-policy=

控 制窗口平面存放的位置。的值可以是:

auto DirectFB依據硬件特性自動判斷,默認爲該選項;

videohigh 以高優先級方式切換(swap)系統/視頻內存;

videolow 以低優先級方式切換(swap)系統/視頻內存;

systemonly 窗口平面保存在系統內存中;

videoonly 窗口平面保存在視頻內存中。

desktop-buffer-mode=

控 制桌面緩衝區模式。無論何時,窗口在移動、打開、關閉、調整大小或者變換內容,DirectFB 將在受影響的範圍內重新合成窗口堆棧,這是通過和平移(blit)在該範圍的窗口一起來完成的。不通明窗口被直接平移,而半透明的窗口則使用alpha 混合或顏色鍵來平移。如果有後端緩衝區(back buffer)的話,合成是不可見的,因爲只有最終的結果會被拷貝到前端緩衝區(front buffer)。如果沒有後端緩衝區,合成的每一步都是可見的,這將導致明顯的閃爍,除非所有的窗口都是非透明的。

的可選值有:

auto DirectFB依據硬件特性來判斷,爲默認值。如果硬件支持簡單blit(從後端向前端緩衝區中拷貝)操作,DirectFB會在視頻緩衝區中選取一個 後端緩衝區。如果沒有加速功能,會在系統內存中開闢一個後端緩衝區,因爲這樣軟件裏的alpha混合合成操作可以執行地更好,並可以避免在結果已經拷貝到 前端緩衝區中的情況下,再重新從視頻緩衝區中讀取。

backsystem 在系統內存中開闢一個後端緩衝區。如果你的硬件支持簡單blitting但卻沒有alpha混合,這是推薦選擇,你將得到許多alpha混合窗口。

backvideo 在視頻內存中分配前端和後端緩衝區。該值特別不建議設定,因爲如果blit被加速的話,‘auto’模式下會選擇該值。沒有加速的blit操作,該值不推 薦使用。

frontonly 沒有後端緩衝區。如果你僅僅使用不透明窗口並且不使用任何顏色鍵,這是一個最佳選擇。

vsync-after

flip 操作後等待垂直折回(vertical retrace)。默認情況下在做flip操作前等待。

vsync-none

對 垂直折回(vertical retrace)關閉polling操作。



例子

下面的例子說明了怎麼在命 令行模式下,把上面介紹的參數傳遞給DirectFB應用程序。

df_neo --dfb:no-hardware

以沒 有硬件加速的方式開始運行df_neo

df_neo --dfb:help

列出可以傳遞給df-neo的所有可選參 數。



附錄:

說明,這裏以下的部分是從網上摘錄的,僅供參考!

Blit操作相關解釋(從 網絡摘抄整理,詳見參考文獻,即reference):

基本含義:

其意義是將一個平面的一部分或全部圖象整塊從這個平面 複製到另一個平面;

Blit與CopyBox的區別:

Blit 用於在不同的屏幕設備(物理的或者內存的)之間拷貝一塊像素點,CopyBox則用於在同一屏幕上實現區域像素的拷貝。如果使用的是線性模式,Blit的 實現非常簡單,直接memcpy 就可以了,而CopyBox 爲了防止覆蓋問題,必須根據不同的情況,採用不同的拷貝方式,比如從底到頂底拷貝,當新老位置在同一水平位置並且重複時,則需要利用緩衝間接拷貝。如果使 用平面顯示模式,這裏就比較複雜了。因爲內存設備總是採用線性模式的,所以就要判斷是物理設備還是內存設備,再分別處理。這也大大地增加了fbvga16 實現的代碼。

Blit與顯示內存的有效利用

新的 GAL 接口能夠有效利用顯示卡上的顯示內存,並充分利用硬件加速功能。我們知道,現在顯示卡一般具有 4M 以上的顯示內存,而一般的顯示模式下,不會佔用所有的顯示內存。比如在顯示模式爲 1204x768x32bpp 時,一屏象素所佔用的內存爲 3M,還有 1M 的內存可供應用程序使用。因此,新的GAL引擎能夠管理這部分未被使用的顯示內存,並分配給應用程序使用。這樣,一方面可以節省系統內存的使用,另一方 面,可以充分利用顯示卡提供的加速功能,在顯示內存的兩個不同內存區域之間進行快速的位塊操作,也就是常說的 Blitting。

Blitting 操作與嵌入式彙編代碼優化處理

在上層 GDI 接口在建立內存 DC 設備時,將首先在顯示內存上分配內存,如果失敗,纔會考慮使用系統內存。這樣,如果 GAL 引擎提供了硬件加速功能,兩個不同 DC 設備之間的 Blitting 操作(即 GDI 函數 BitBlt),將以最快的速度運行。更進一步,如果硬件支持透明或 Alpha 混和功能,則透明的或者 Alpha 混和的 Blitting 操作也將以最快的速度運行。新的 GAL 接口能夠根據底層引擎的加速能力自動利用這些硬件加速功能。目前支持的硬件加速能力主要有:矩形填充,普通的 Blitting 操作,透明、Alpha 混和的 Blitting 操作等。當然,如果硬件不支持這些加速功能,新的 GAL 接口也能夠通過軟件實現這些功能。目前通過 GAL 的 FrameBuffer 引擎提供上述硬件加速功能的顯卡有:Matrox、3dfx 等。

在通過軟件實現透明或混和的 DC 間 Blitting 操作時,新的 GAL 接口利用了兩種有效的優化措施:

在 i386 平臺上,充分利用嵌入式彙編代碼進行優化處理;比如在處理 32 位色模式下的普通 Blitting 操作時,在利用普通的 C 庫函數,即 memcpy 進行位塊複製時,由於 memcpy 函數是以字節爲單位進行復制的,從而無法利用 32 位 CPU 對 32 位字的處理能力,爲此,可以使用嵌入式彙編,並以 32 位字爲單位進行復制,這將大大提高 Bliting 操作的處理速度。

對源 DC 進行 RLE(Run Length Encoding)編碼,從而對象素的處理數量最小化。RLE 可以看成是一種圖象壓縮算法,Windows BMP 文件就利用了這種算法。RLE 是按水平掃描線進行壓縮編碼處理的。在一條掃描線上,如果有大量相同的象素,則不會保存這些象素點,而是首先保存具有相同象素點的數目,然後保存這些象素 點的值。這樣,在進行透明或者混和的 Blitting 操作時,可以大大降低逐點運算帶來的速度損失。但是,如果在最壞的情況下,比如所有水平掃描線上的象素點都具有和相鄰點不同的象素值,則 RLE 編碼反而會增加象素的存儲空間(最壞的情況是原有空間的兩倍),同時也會降低 Blitting 操作的速度。因此是否使用 RLE 編碼,要根據情況而定。新的 GDI 接口在指定源 DC 的透明和 Alpha 通道值時,可以指定是否使用 RLE 編碼。



Reference:

1.Man page of DIRECTFBRC 一篇英文的參數說明檔;

see:http://www.directfb.org/docs/directfbrc.5.html

2.MiniGUI 對blit的解釋;see:http://www.huihoo.org/joyfire.net/3-2.html

3.DirectX6.0 程序員手冊,其中,有一點對blit的解釋;

see:http://www.codingnow.com/directx6/dx6_dd9.htm#blit 
發佈了98 篇原創文章 · 獲贊 106 · 訪問量 74萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章