新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 嵌入式Linux系統(tǒng)圖形及圖形用戶界面

嵌入式Linux系統(tǒng)圖形及圖形用戶界面

作者: 時間:2012-05-22 來源:網絡 收藏

當然,因為不同的顯示芯片具有不同的加速能力,對memio 的使用和定義也各自不同,這時,就需要針對加速芯片的不同類型來編寫實現(xiàn)不同的加速功能。比如大多數(shù)芯片都提供了對矩形填充的硬件加速支持,但不同的芯片實現(xiàn)方式不同,這時,就需要針對不同的芯片類型編寫不同的用來完成填充矩形的函數(shù)。

說到這里,讀者可能已經意識到 FrameBuffer 只是一個提供顯示內存和顯示芯片寄存器從物理內存映射到進程地址空間中的設備。所以,對于應用程序而言,如果希望在 FrameBuffer 之上進行圖形編程,還需要完成其他許多工作。舉個例子來講,F(xiàn)rameBuffer 就像一張畫布,使用什么樣子的畫筆,如何畫畫,還需要你自己動手完成。

1.4 LibGGI

LibGGI 試圖建立一個一般性的圖形接口,而這個抽象接口連同相關的輸入(鼠標、鍵盤、游戲桿等)抽象接口一起,可以方便地運行在 X Window、SVGALib、FrameBuffer 等等之上。建立在 LibGGI 之上的應用程序,不經重新編譯,就可以在上述這些底層圖形接口上運行。但不知何故,LibGGI 的發(fā)展幾乎停滯。

2 Linux 圖形領域的高級函數(shù)庫

2.1 Xlib 及其他相關函數(shù)庫

在 X Window 系統(tǒng)中進行圖形編程時,可以選擇直接使用 Xlib。Xlib 實際是對底層 X 協(xié)議的封裝,可通過該函數(shù)庫進行一般的圖形輸出。如果你的 X Server 支持 DGA,則可以通過 DGA 擴展直接訪問顯示設備,從而獲得加速支持。對一般用戶而言,由于 Xlib 的接口太原始而且復雜,因此一般的圖形程序選擇其他高級一些的圖形庫作為基礎。比如,GTK、QT 等等。這兩個函數(shù)同時還是一些高級的支持函數(shù)庫。由于種種原因,GTK、QT 等函數(shù)庫存在有龐大、占用系統(tǒng)資源多的問題,不太適合在系統(tǒng)中使用。這時,你可以選擇使用 FLTK,這是一個輕量級的圖形函數(shù)庫,但它的主要功能集中在用戶界面上,提供了較為豐富的控件集。

2.2 SDL

SDL(Simple DirectMedia Layer)是一個跨平臺的多媒體游戲支持庫。其中包含了對圖形、聲音、游戲桿、線程等等的支持,目前可以運行在許多平臺上,其中包括 X Window、X Window with DGA、Linux FrameBuffer 控制臺、Linux SVGALib,以及Windows DirectX、BeOS 等等。

因為 SDL 專門為游戲和多媒體應用而設計開發(fā),所以它對圖形的支持非常優(yōu)秀,尤其是高級圖形能力,比如 Alpha 混和、透明處理、YUV 覆蓋、Gamma 校正等等。而且在 SDL 環(huán)境中能夠非常方便地加載支持 OpenGL 的 Mesa 庫,從而提供對二維和三維圖形的支持。

可以說,SDL 是編寫跨平臺游戲和多媒體應用的最佳平臺,也的確得到了廣泛應用。

2.3 Allegro

Allegro 是一個專門為 x86 平臺設計的游戲圖形庫。最初的 Allegro 運行在 DOS 環(huán)境下,而目前可運行在 Linux FrameBuffe 控制臺、Linux SVGALib、X Window 等系統(tǒng)上。Allegro 提供了一些豐富的圖形功能,包括矩形填充和樣條曲線生成等等,而且具有較好的三維圖形顯示能力。由于 Allegro 的許多關鍵代碼是采用匯編編寫的,所以該函數(shù)庫具有運行速度快、資源占用少的特點。然而,Allegro 也存在如下缺點:

1)對線程的支持較差。Allegro 的許多函數(shù)是非線程安全的,不能同時在兩個以上的線程中使用。

2)對硬件加速能力的支持不足,在設計上沒有為硬件加速提供接口。

2.4 Mesa3D

Mesa3D 是一個兼容 OpenGL 規(guī)范的開放源碼函數(shù)庫,是目前 Linux 上提供專業(yè)三維圖形支持的惟一選擇。Mesa3D 同時也是一個跨平臺的函數(shù)庫,能夠運行在 X Window、X Window with DGA、BeOS、Linux SVGALib 等平臺上。

2.5 DirectFB

DirectFB 是專注于 Linux FrameBuffer 加速的一個圖形庫,并試圖建立一個兼容 GTK 的 GUI 系統(tǒng)。它以可裝載函數(shù)庫的形勢提供對加速 FrameBuffer 驅動程序的支持。目前,該函數(shù)庫正在開發(fā)之中(最新版本 0.9.97),詳情可見 http://www.directfb.org/。

3 面向Linux 系統(tǒng)的

3.1 MicoroWindows/NanoX

MicroWindows(http: //microwindows.censoft.com)是一個開放源碼的項目,目前由美國 Century Software 公司主持開發(fā)。該項目的開發(fā)一度非常活躍,國內也有人參與了其中的開發(fā),并編寫了 GB2312 等字符集的支持。但在 Qt/Embedded 發(fā)布以來,該項目變得不太活躍,并長時間停留在 0.89Pre7 版本。可以說,以開放源碼形勢發(fā)展的 MicroWindows 項目,基本停滯。

MicroWindows 是一個基于典型客戶/服務器體系結構的 GUI 系統(tǒng),基本分為三層。最底層是面向圖形輸出和鍵盤、鼠標或觸摸屏的驅動程序;中間層提供底層硬件的抽象接口,并進行窗口管理;最高層分別提供兼容于 X Window 和 Windows CE(Win32 子集)的 API。

該項目的主要特色在于提供了類似 X 的客戶/服務器體系結構,并提供了相對完善的圖形功能,包括一些高級的功能,比如 Alpha 混合,三維支持,TrueType 字體支持等。但需要注意的是,MicroWindows 的圖形引擎存在許多問題,可以歸納如下:

1)無任何硬件加速能力。

2)圖形引擎中存在許多低效算法,同時未經任何優(yōu)化。比如在直線或者圓弧繪圖函數(shù)中,存在低效的逐點判斷剪切的問題。

3)代碼質量較差。由于該項目缺少一個強有力的核心代碼維護人員,因此代碼質量參差不齊,影響整體系統(tǒng)穩(wěn)定性。這也是 MicroWindows 長時間停留在 0.89Pre7 版本上的原因。

MicroWindows 采用 MPL 條款發(fā)布(該條款基本類似 LGPL 條款)。

3.2 OpenGUI

OpenGUI(http://www.tutok.sk/fastgl/)在 Linux 系統(tǒng)上存在已經很長時間了。最初的名字叫 FastGL,只支持 256 色的線性顯存模式,但目前也支持其他顯示模式,并且支持多種操作系統(tǒng)平臺,比如 MS-DOS、QNX 和 Linux 等等,不過目前只支持 x86 硬件平臺。OpenGUI 也分為三層。最低層是由匯編編寫的快速圖形引擎;中間層提供了圖形繪制 API,包括線條、矩形、圓弧等,并且兼容于 Borland 的 BGI API。第三層用 C++ 編寫,提供了完整的 GUI 對象集。

OpenGUI 采用 LGPL 條款發(fā)布。OpenGUI 比較適合于基于 x86 平臺的實時系統(tǒng),可移植性稍差,目前的發(fā)展也基本停滯。

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

linux相關文章:linux教程




評論


相關推薦

技術專區(qū)

關閉