GLX學習與分析

2021-04-14 01:05:31 字數 3045 閱讀 2623

glx

是x window

的乙個擴充套件,按我的理解,它是專門為

x window

實現3d

渲染而開發的乙個擴充套件。

x window

沒有開發自己的

3d渲染的實現,而是使用了

mesa

(不準確的說是

opengl

的一種實現),為了實現

x window

與opengl

的結合,制定了

glx標準。

glx的實現主要有兩個版本,乙個是基於

xorg

的,乙個是基於

xfree86

的,兩者差別不大,下面我們討論的都是基於

xfree86

的實現。

一、x windowopenggl的結合的思路

x window

走的是2d

的path

,而opengl

走的是3d

的path

,那麼兩者怎麼樣才能有效地結合在一起,使原本走

2d path

的x window

具有3d

的效果呢?

x window

採用的方法就是由它自己建立

drawable

,然後把

drawable

交給opengl

來渲染,再由

opengl

將渲染結果顯示到螢幕上,從而使

x window

具有3d

的效果。如何把

drawable

交給opengl

就是glx

所要做的工作。 x

提供了兩種

drawable: window

(onscreen

)和pixmap

(offscreen

)。與之對應的

glx也有

glxwindow

和glxpixmap

,此外,

glx還有自己特有的位於

offscreen

上的glxpbuffer

,glxpbuffer

與glxpixmap

不同是它比

glxpixmap

建立(在不可見的

frame buffer

中)更加方便。 對於

x window

和openggl

及glx

的關係圖請參閱「

aiglx

學習總結」。

二、應用程式的一般過程

應用程式一般先用

xopendisplay

開啟乙個鏈結,然後通過

glxqueryextension

查詢是否有

glx擴充套件

,如果不存在就做相應的處理

,否則就建立乙個視窗

,然後通過

glxgetfbconfigs

得到乙個

glxfbconfig

,它是主要用來描述顏色快取和一些輔助快取的格式、型別和大小的,建立

glxwindow

和glxcontext

的時候需要指定乙個

glxfbconfig

。接著把剛才建立的

xwindow

和glxfbconfig

傳給glxcreatewindow

建立乙個可以讓

opengl

渲染的視窗。同時,通過把剛才建立的

glxfbconfig

傳給glxcreatenewcontext

建立乙個

render context

。然後通過

glxmakecontextcurrent

把剛剛建立的

reder context

繫結到剛才建立的

glxwindow

上,那麼以後的

gl操作都將是按照

render context

對glxwindow

的操作。其大概的流程圖如下所示:

三、gl擴充套件的實現

由於在aiglx

中,gl

的實現是

indirect

方式的,即需要通過

x server

來實現,所以需要某個擴充套件來支援

gl命令從客戶端到伺服器的傳送,然而我找了很久都沒有發現這個擴充套件,後來才發現原來它是通過

glx擴充套件來實現

gl命令的傳送的。

既然glx是

x的乙個擴充套件,那麼它就是滿足

x的擴充套件機制的,關於

x的擴充套件機制可以參考

absurd

的x window

研究筆記。乙個擴充套件的實現必須包含三個部分,

client

,protocol

和server

,基本上乙個函式(需要

x server

來實現的函式)就需要在

protocol

中定義乙個請求的結構,然而對於

gl的命令

glx卻沒有為每個

gl函式設立乙個

request

,而是將所有的

gl命令的傳送都通過乙個

reques

即glxrender

請求來傳送,只是每個

gl命令的內部操作碼不同而已。具體的**可以參考

sgi的

glx的實現中的

g_render.c 。

機器學習 相關分析與回歸分析基礎

在研究變數關係的過程中,通常對於被研究的變數,稱為因變數,也稱為被解釋變數,一般用y表示。其它用來說明或解釋因變數變化的變數稱為自變數,也稱為解釋變數,用x表示。自變數可以有乙個,也可以有多個。例如,如果我們想 銷售收入,則銷售收入就是我們這次研究的因變數,如果我們是通過廣告費的支出來 銷售收入,則...

演算法設計與分析學習 蠻力法

參考 演算法設計與分析 第三章 蠻力法 接下來的每章中,我們專注於一種特定的演算法設計策略。蠻力法是一種最簡單和直接的解決問題的辦法,往往是低效的,但我們不應該忽略它的地位,1 它可以解決廣闊領域的各種問題 2 在規模允許時,多少可以產生一些實用的演算法 3 往往可以以蠻力法為準繩,來衡量高效的演算...

機器學習與數學分析

機器學習是人工智慧的乙個分支。我們使用計算機設計乙個系統,使他能夠提供的訓練資料按照一定的方式來學習 隨著訓練次數的增加,該系統可以在效能上不斷學習和改進 通過引數優化的學習模型,能夠用於 相關問題的輸出。1 機器學習可以解決的問題 給定資料的 問題,包括資料清洗 特徵選擇,確定演算法模型 引數優化...