關(guān)于2D/3D圖形API的簡介
xserver提供X服務(wù),X server?不是指某臺機(jī)器,而是指一個進(jìn)程,它負(fù)責(zé)接受客戶的要求,在屏幕上顯示客戶請求的圖形,并且把消息(鍵盤,鼠標(biāo),窗口消息)通知客戶程序。xclient是X應(yīng)用終端。
X 視窗系統(tǒng)(X Window System)是一個分布式的、網(wǎng)絡(luò)透明的、設(shè)備獨(dú)立的、多任務(wù)的 windowing 和制圖系統(tǒng),它提供標(biāo)準(zhǔn)工具箱和協(xié)議來構(gòu)建圖形用戶界面 (GUI), 在 Unix,類 Unix 系統(tǒng)和 OpenVMS-幾乎所有的現(xiàn)代操作系統(tǒng)都支持它。X 為 GUI 環(huán)境提供基本的架構(gòu):繪制和移動屏幕上的視窗和能與鼠標(biāo)和/或鍵盤相交互。
OpenGL、OpenGL ES、OpenVG
OpenGL是行業(yè)領(lǐng)域中最為廣泛接納的2D/3D圖形API, 其自誕生至今已催生了各種計(jì)算機(jī)平臺及設(shè)備上的數(shù)千優(yōu)秀應(yīng)用程序。(既然是API, 那就說明各家都有不同的實(shí)現(xiàn),在性能方面會有差異)OpenGL是獨(dú)立于視窗操作系統(tǒng)或其它操作系統(tǒng)的,亦是網(wǎng)絡(luò)透明的。OpenGL幫助程序員實(shí)現(xiàn)在 PC、工作站、超級計(jì)算機(jī)等硬件設(shè)備上的高性能、極具沖擊力的高視覺表現(xiàn)力圖形處理軟件的開發(fā)。?
OpenGL ES是免授權(quán)費(fèi)的,跨平臺的,功能完善的2D和3D圖形應(yīng)用程序接口API,它針對多種嵌入式系統(tǒng)專門設(shè)計(jì)。它由精心定義的桌面OpenGL子集組成,創(chuàng)造了軟件與圖形加速間靈活強(qiáng)大的底層交互接口。 OpenGL ES包含浮點(diǎn)運(yùn)算和定點(diǎn)運(yùn)算系統(tǒng)描述以及EGL,針對便攜設(shè)備的本地視窗系統(tǒng)規(guī)范。
OpenGL ES 1.X 面向功能固定的硬件所設(shè)計(jì)并提供加速支持、圖形質(zhì)量及性能標(biāo)準(zhǔn)。OpenGL ES 2.X 則提供包括遮蓋器技術(shù)在內(nèi)的全可編程3D圖形算法。說白了,就是OpenGL的子集、可以應(yīng)用于ES上。?
OpenVG是針對諸如Flash和SVG的矢量圖形算法庫提供底層硬件加速界面的免授權(quán)費(fèi)、跨平臺應(yīng)用程序接口API。OpenVG現(xiàn)仍處于發(fā)展階段,其初始目標(biāo)主要面向需要高質(zhì)量矢量圖形算法加速技術(shù)的便攜手持設(shè)備,用以在小屏幕設(shè)備上實(shí)現(xiàn)動人心弦的用戶界面和文本顯示效果,并支持硬件加速以在極低的處理器功率級別下實(shí)現(xiàn)流暢的交互性能。?
2. GLX、EGL:
GLX是OpenGL Extension to the X Window System的縮寫。它作為x的擴(kuò)展,是x協(xié)議和X server的一部分,已經(jīng)包含在X server的代碼中了。GLX提供了x window system使用的OpenGL接口,允許通過x調(diào)用OpenGL庫。OpenGL 在使用時,需要與一個實(shí)際的窗口系統(tǒng)關(guān)聯(lián)起來。在不同平臺上有不同的機(jī)制以關(guān)聯(lián)窗口系統(tǒng),在Windows上是WGL,在Linux上是GLX,在 Apple OS上是AGL等。?
EGL則是OpenGL ES在嵌入式平臺上(WGL,GLX,AGL)的等價(jià)物。EGL假設(shè)OS會提供窗口系統(tǒng),但EGL與平臺無關(guān),并不局限于任何特定的窗口系統(tǒng),所有用到本地窗口系統(tǒng)的地方都用屏蔽指針來處理。我覺得這就是它易于移植的關(guān)鍵。?
3.其它:?
Mesa 3D是OpenGL的一個開源本的實(shí)現(xiàn),支持3D硬件加速,X.Org和DRI都使用它作為OpenGL驅(qū)動。?DRI是Direct Rendering Infrastructure的縮寫。DRI是一個安全且有效率的直接對顯示硬件存取的方法。它包含對X server,一些client函數(shù)庫、以及對內(nèi)核的變更。DRI的一個主要目的就是提供高效能的OpenGL支持。XGL項(xiàng)目由Novell發(fā)起,是一個X server架構(gòu),其設(shè)計(jì)意圖在于通過OpenGL驅(qū)動充分發(fā)揮最新顯卡的功能,支持所有X、OpenGL和XVideo的硬件加速。該項(xiàng)目最初于 2006年1月在X.org中發(fā)布,但隨后由于AIGLX的出現(xiàn),在2008年1月被X.org拋棄。Xgl可以使用Xglx和Xegl作為后臺的 server。作為其衍生品,compiz和Xgl是完全兼容的。?
AIGLX是Accelerated Indirect GLX的縮寫。該項(xiàng)目由Red Hat和Fedora社區(qū)發(fā)起。此處Indirect的含義在于:client端應(yīng)用程序的OpenGL命令首先送給X?server,再通過X server調(diào)用顯卡驅(qū)動層的OpenGL接口,這里X協(xié)議走的是GLX。Xgl則是另外一種方式:建立一個OpenGL窗口,由OpenGL庫直接調(diào)用顯卡驅(qū)動。X.Org 7.1開始,已經(jīng)加入了AIGLX。?
Xglx是Xgl框架的一個后臺 server,但他仍然需要一個現(xiàn)有的x server,Xglx通過x server的GLX創(chuàng)建OpenGL窗口,然后使用它,類似于Xnest;同時,Xglx還對x server做一些使用OpenGL顯示和繪圖的初始化操作。盡管使用另外一個x server顯得多余,Xglx卻避免了和不同的圖形硬件直接打交道。?
Xegl是Xgl框架的另一個后臺server,繼承了Xglx中繪圖相關(guān)的代碼,但它對OpenGL環(huán)境的初始化部分,調(diào)用的是EGL接口(而非Xglx使用的GLX)。由于一些硬件的閉源驅(qū)動不提供支持EGL的接口,Xegl的開發(fā)有些停滯。