如何使用OpenGL中的擴充套件

2021-07-09 07:23:47 字數 1846 閱讀 8861

如果你在windows平台下開發

opengl程式,那麼

系統中自帶的opengl庫就是1.1的,如果想使用1.2或者更高版本的opengl庫,那麼只能使用opengl擴充套件,在網上關於如何使用opengl擴充套件的文章很多,但是多數都是簡單帶過,抄來抄去,很少有實際的**,我當時也遇到過同樣的問題,幾經周折終於找到了解決辦法,不敢獨享,拿出來與大家分享,如果有什麼不當之處,一定告訴我,感激不盡!

一. 概念的澄清

其實,對於乙個剛剛接觸opengl的新手來說,如果是在windows平台下開發,這個問題是一定會經歷的,為什麼呢?因為很多參考書上都會提到opengl2.0,但是微軟對opengl的支援只到1.1,1.1以後微軟就不再支援了,為什麼,因為微軟更想發展自家的directx。所以如果想使用opengl1.1以上的功能或者

函式,只能使用opengl擴充套件,這些擴充套件是一些opengl團體或個人開發出來的能windows上使用的opengl1.1以後的一些功能及函式。所以,在windows上根本就沒有什麼opengl2.0的標頭檔案或庫檔案了,opengl1.1以後的東西都已經以擴充套件的形式存在了,而且,並沒有乙個統一的標準,你可以使用glex,glew,glee等等。下面我給出兩種常用的方法:

大多數人都是在

執行紅寶書中的程式時遇到這個問題,比如這個函式glblendequation,它就是gl_arb_imaging擴充套件中的乙個函式。所以,在使用乙個擴充套件之前,首先要做的就是判斷你的

顯示卡是否支援該擴充套件。

二. 如何判斷顯示卡所支援的擴充套件:

使用函式glgetstring,看一下它的原型:

const     glubyte   * glgetstring( glenum name )

我們以gl_extensions為引數呼叫該函式,就能獲得當前顯示卡所支援的所有擴充套件,像下面這樣:

const glubyte *str = glgetstring(gl_extensions) ;

cout << str << endl ;

輸出的各個擴充套件之間以空格分隔,如果這些擴充套件中包含gl_arb_imaging,那麼你就可以使用glblendequation這個函式了。

當然,這樣查詢的只是gl擴充套件,還可以用glugetstring獲得glu擴充套件。

三. 使用擴充套件函式

在判斷了顯示卡所支援的擴充套件以後,就可以使用該擴充套件中所包含的函式了下面詳細

介紹兩種使用擴充套件函式的具體方法:

使用glext 這裡

#include

#include

#include

#include

b)獲取函式指標

先定義函式指標,pfnglblendequationproc  glblendequation = null;

再獲取函式位址, 使用wglgetprocaddress函式,注意這一句要加在使用glblendequation函式的語句之前才有效,最後後面緊跟著使用glblendequation的函式語句,切記不要加在所有子程式的外面,否則獲取的指標是無效的

glblendequation = (pfnglblendequationproc)wglgetprocaddress("glblendequation");

例如可以這樣加:

pfnglblendequationproc glblendequation = (pfnglblendequationproc)wglgetprocaddress("glblendequation");

switch(key)

好了,現在可以放心使用擴充套件了,趕快繼續你的opengl之旅吧!

再提供幾個好一點的opengl站點:

第一位:當然是

第二位:入門的好站點:

wiki/index.php/main_page

OpenGL擴充套件的使用

副檔名每個擴充套件都有乙個副檔名,副檔名類似如下形式 gl arb multitexture 第一段gl 用來表示針對 opengl 哪部分開發的擴充套件,有以下幾個值 gl 針對opengl 核心的擴充套件 wgl 針對windows 平台的擴充套件 glx 針對unix linux 平台的擴充套...

在php擴充套件開發中如何使用pkg config

首先科普下pkg config能幹啥。下面是維基百科對pkg config的說明 pkg config 是乙個提供從源 中編譯軟體時查詢已安裝的庫時使用的統一介面的計算機軟體。pkg config原本是設計用於linux的,但現在在各個版本的bsd windows mac os x和solaris上...

擴充套件DLL中的資源使用

碰到了擴充套件 dll中的資源使用的問題,解決後,共享 簡單的說 每個 dll有自己特有的資源。在使用時,明確的告訴系統要使用哪個 dll的資源。ok,現在的問題就是如何告訴系統使用哪個 dll的資源。函式 afxsetresourcehandle 可以完成這個功能。引數是資源的控制代碼。那怎麼得到...