初探Mobile Linux上GL/ES等 3D APP與XServer的關係。

衆所周知,Mobile Linux上的3D APP是基於OpenGL,或者OpenGL ES,後者是前者面向嵌入式設備的一個簡化版本。目前基於是OpenGL/ES上的一個圖形封裝類庫Clutter也漸漸爲人們所熟知。這些都是衆所周知的廢話,下面想探討的是基於OPENGL/ES等 3D APP與Linux原來的面向2D的X Server是什麼關係?


當然不是喫飽了撐着平白無故想這個問題,對這個問題的疑惑來自於Moblin平臺上的Clutter Destop上一個GTK程序調用gtk_widget_show時的CoreDump問題,該GTK程序在Gnome Destop下運行正常。於是想,是不是3D的UI仍然依賴於XServer?


想深一層:Linux原有的XServer系統會接管屏幕的各種輸入事件,例如,鍵盤、鼠標、觸摸屏,其配置放在Xorg.conf中。這一點從Xerver的原理圖及維基百科上對Xserver的描述可以瞭解到。an X server communicates with various client programs. The server accepts requests for graphical output (windows) and sends back user input (from keyboard, mouse, or touchscreen). 如果3D的應用不掛在XServer上,用戶的輸入事件如何到達應用?

 

XServer原理圖

在網上查找資料的時候發現了臺灣黃敬羣大牛的講解的PPT《支援硬體加速的OPENGL/ES實做》,該大牛不愧爲敬業樂羣的好名字,技術精湛,樂於分享,讀後深有啓發。


GLX (OpenGL Extension to the X Window System)爲X Windows System提供Open GL的擴展。因此3D的APP不是拋離X Server,而是與之共存。下圖是敬羣大牛PPT中GLX的圖。

 

glx

GLX包含了下面的內容:


1、X Window System application中的OpenGL API擴展

2、X 協議的擴展, 上圖中的除了原有的Xpackets,新擴展一種GLX Packets。使客戶端(the OpenGL application)發送 3D 渲染命令給 X server (the software responsible for the display)。 我的理解是,原有的X 協議不變基礎上添加新的GLX擴展,因此,原有的用戶事件輸入處理流程是不變的。

3、X server的功能擴展,使之可以接收渲染命令。 (如果無硬件加速的OpenGL類庫則使用 Mesa 類庫)。


如果X Window System application和X server運行在同一臺機器上,並且3D加速的圖形卡及驅動能夠支持,可以使用DRI(Direct Rendering Infrastructure)直接訪問圖形硬件設備。


直接的3D圖形渲染和間接的3D圖形渲染。如下圖所示:

3D的直接渲染與間接渲染

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章