linux-x11架構


|--reference
  https://www.cnblogs.com/newjiang/p/8414625.html

|--X Window System

1) X Window System簡稱X,或者X11,或者X-Windows。之所以稱作X,
  是因為在字母表中X位於W之后,而W是MIT在X之前所使用的GUI系統。
  之所以稱作X11,是因為在1987年的時候,X Window System已經進化到第11個版本,
  后續所有的X,都是基於X11版本發展而來的(變動不是很大) 。
  為了方便,后續我們都以X代指X Window System。

2) X最初是由X.org(XOrg Foundation) 維護,
  后來基於X11R6發展出來了最初專門給Intel X86架構PC使用的X,
  稱作XFree86(提供X服務,它是自由的,它是基於Intel的PC平台) 。
  而后XFree86發展成為幾乎適用於所有類UNIX操作系統的X Window系統,
  因此在相當長的一段時間里,XFree86也是X的代名詞。
  再后來,從2004年的時候,XFree86不再遵從GPL許可證發行,
  導致許多發行套件不再使用XFree86,轉而使用Xorg,
  再加上Xorg在X維護工作上又趨於活躍,現在Xorg由成為X的代名詞
  (具體可參考“http://www.x.org/”) 。

3) X設計之初,制定了很多原則,其中一條
  ----"It is as important to decide what a system is not as to decide what it is”,
  決定了X的“性格”,即:X只提供實現GUI環境的基本框架,
  如定義protocol、在顯示設備上繪制基本的圖形單元(點、線、面等等) 、
  和鼠標鍵盤等輸入設備交互、等等。
  它並沒有實現UI設計所需的button、menu、window title-bar styles等元素,
  而是由第三方的應用程序提供。
  這就是Unix的哲學:只做我應該做、必須做的事情。
  這就是這么多年來,X能保持穩定的原因。
  也是Linux OS界面百花齊放(不統一) 的原因,各有利弊吧,后續文章會展開討論。

4) X包括X server和X client,它們之間通過X protocol通信。

5) X server接收X clients的顯示請求,並輸出到顯示設備上,
  同時,會把輸入設備的輸入事件,轉遞給相應的X client。
  X server一般以daemon進程的形式存在。

6) X protocol是網絡透明(network-transparently) 的,也就是說,
  server和client可以位於同一台機器上的同一個操作系統中,
  也可以位於不同機器上的不同操作系統中(因此X是跨平台的) 。
  這為遠端GUI登錄提供了便利,如上面圖片所示的運行於remote computer 的terminal emulator,
  但它卻可以被user computer的鼠標鍵盤控制,以及可以輸出到user computer的顯示器上。
  注4:這種情況下,user computer充當server的角色,remote computer是client,有點別扭,
  需要仔細品味一下(管理輸入設備和顯示設備的是server) 。

7) X將protocol封裝為命令原語(X command primitives) ,
  以庫的形式(xlib或者xcb) 向client提供接口。X client(即應用程序) 利用這些API,
  可以向X server發起2D(或3D,通過GLX等擴展,后面會介紹) 的繪圖請求。

|--3D渲染、硬件加速、OpenGL及其它

  渲染(Render) 在電腦繪圖中,是指:用軟件從模型生成圖像的過程。
  模型是用嚴格定義的語言或者數據結構對於三維物體的描述,
  它包括幾何、視點、紋理以及照明信息。圖像是數字圖像或者位圖圖像。
  其實我們在GUI編程中習以為常的點、線、矩形等等的繪制,
  也是渲染的過程中,只不過是2D渲染。2D渲染面臨的計算復雜度和性能問題沒有3D厲害,
  因此渲染一般都是指3D渲染。
  在計算機中,2D渲染一般是由CPU完成(也可以由專門的硬件模塊完成) 。
  3D渲染也可以由CPU完成,但面臨性能問題,因此大多數平台都會使用單獨硬件模塊
  (GPU或者顯卡) 負責3D渲染。這種通過特定功能的硬件模塊,
  來處理那些CPU不擅長的事務的方法,稱作硬件加速(Hardware acceleration) ,
  相應的硬件模塊,就是硬件加速模塊。
  眾所周知,硬件設備是多種多樣的,為了方便應用程序的開發,
  需要一個穩定的、最好是跨平台的API,定義渲染有關的行為和動作。
  OpenGL(Open Graphics Library) 就是這類API的一種,也是最為廣泛接納的一種。
  雖然OpenGL只是一個API,但由於3D繪圖的復雜性,它也是相當的復雜的。
  不過,歸根結底,它的目的有兩個:
  1) 對上,屏蔽硬件細節,為應用程序提供相對穩定的、
    平台無關的3D圖像處理API(當然,也可以是2D) 。
  2) 對下,指引硬件相關的驅動軟件,實現3D圖像處理相關的功能。
    另外,openGL的一個重要特性,是獨立於操作系統和窗口系統而存在的,
  具體可以參考后面軟件框架相關的章節。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM