副檔名每個擴充套件都有乙個副檔名,副檔名類似如下形式:
gl_arb_multitexture
第一段gl
,用來表示針對
opengl
哪部分開發的擴充套件,有以下幾個值:
gl –
針對opengl
核心的擴充套件
wgl –
針對windows
平台的擴充套件
glx –
針對unix / linux
平台的擴充套件
glu –
針對opengl utility library
的擴充套件第二段
arb,用來表示是誰開發的這個擴充套件,常見以下幾個值:
arb –
經opengl architecture review board
(opengl
管理機構)正式核准的擴充套件,往往由廠商開發的擴充套件發展而來,如果同時存在廠商開發的擴充套件和
arb擴充套件,應該優先使用
arb擴充套件
ext –
被多個硬體廠商支援的擴充套件
nv – nvidia
公司開發的擴充套件
ati – ati
公司開發的擴充套件
atix– ati
公司開發的實驗性擴充套件
sgi – silicon graphics
(sgi
)公司開發的擴充套件
sgix– silicon graphics
(sgi
)公司開發的實驗性擴充套件
第三段multitexture
就是真正的副檔名了,如
multitexture
就是多重紋理擴充套件。
2.2使用
opengl
擴充套件要使用乙個
opengl
擴充套件,首先必須檢查顯示卡是否支援這個擴充套件,以下**可以獲取乙個顯示卡支援的的
opengl
擴充套件:const char *str = glgetstring( gl_extensions );
函式返回乙個字串指標,這個字串就是顯示卡所支援的所有擴充套件的副檔名,不同的副檔名之間用空格隔開,形如:
"gl_arb_imaging gl_arb_multitexture gl_arb_point_parameters ……"
opengl
擴充套件往往都會新增一些函式,在
windows
平台上,這些函式不是通過
.lib
庫連線到程式裡的,而要在執行時動態獲得函式的指標。我們以
gl_arb_point_parameters
擴充套件為例看看怎麼獲得函式指標。
首先要定義函式指標型別,
typedef void (apientry * pfnglpointparamete***rbproc)(glenum pname,
glfloat param);
typedef void (apientry * pfnglpointparameterfvarbproc)(glenum pname,
const glfloat *params);
這個工作
sgi已經為我們做好,它提供了乙個標頭檔案
glext.h
include/gl
資料夾下面,然後在程式裡面加上:
#include
就可以在程式中使用常量和函式指標型別了。
然後要定義函式指標:
pfnglpointparamete***rbproc glpointparamete***rb;
pfnglpointparameterfvarbproc glpointparameterfvarb;
再檢查顯示卡是否支援
gl_arb_point_parameters
擴充套件,其中
i***tensionsupported
是自定義的乙個函式,就是在
glgetstring( gl_extensions )
返回的字串裡查詢是否存在指定的副檔名:
int haspointparams = i***tensionsupported("gl_arb_point_parameters");
如果支援,就可以用
wglgetprocaddress
函式獲取擴充套件函式的指標:
if (haspointparams)
最後就可以在程式裡使用擴充套件函式:
if (haspointparams)
;glpointparameterfvarb(gl_distance_attenuation_arb, quadratic);
glpointparamete***rb(gl_point_fade_threshold_size_arb, 1.0);
}csdn
知識庫)
呼叫wglgetprocaddress
函式訪問乙個不在標準
opengl
庫中的擴充套件函式。如果該擴充套件函式存在當前的執行
(implementation)
中,那麼
wglgetprocaddress
返回乙個用來訪問該函式的函式指標。否則,
wglgetprocaddress
返回null.
例如,要訪問
gladdswaphintrectwin
擴充套件函式,如下呼叫
wglgetprocaddress:
// get a pointer to the extension function.
typedef void (winapi *fnswaphint)(glint, glint, glsizei, glsizei);
fnswaphint = (fnswaphint)wglgetprocaddress("gladdswaphintrectwin");
// actual call to gladdswaphintrectwin.
if (fnswaphint != null)
(*fnswaphint)(0, 0, 100, 100);
2.3 wgl
擴充套件glgetstring( gl_extensions )
取得的擴充套件字串中並不包括針對
windows
平台的wgl
擴充套件,wgl
擴充套件串要通過
wgl_arb_extensions_string
擴充套件來獲得,以下**演示了如何獲得
wgl擴充套件串:
定義wgl_arb_extensions_string
擴充套件新增函式
wglgetextensionsstringarb
的函式指標型別,同樣這個工作
sgi已經為我們做好,只不過不在
glext.h
中,而在它提供的另外乙個標頭檔案
wglext.h
中:typedef const char *(apientry * pfnwglgetextensionsstringarbproc)(
hdc hdc);
定義函式指標:
pfnwglgetextensionsstringarbproc wglgetextensionsstringarb;
檢查是否支援
wgl_arb_extensions_string
擴充套件,如果不支援,表示這個顯示卡不支援
wgl擴充套件,如果支援,則得到
wglgetextensionsstringarb
函式的指標,並呼叫它得到
wgl擴充套件串:
int haswglext = i***tensionsupported("wgl_arb_extensions_string");
if (haswglext)
如何使用OpenGL中的擴充套件
如果你在windows平台下開發 opengl程式,那麼 系統中自帶的opengl庫就是1.1的,如果想使用1.2或者更高版本的opengl庫,那麼只能使用opengl擴充套件,在網上關於如何使用opengl擴充套件的文章很多,但是多數都是簡單帶過,抄來抄去,很少有實際的 我當時也遇到過同樣的問題,...
OpenGL系統設計 OpenGL擴充套件
和微軟的direct3d directgraphics相比較,opengl的乙個最大的優點是其擴充套件機制。對於顯示卡硬體的新功能,除非微軟發布了directx的新版本,否則,程式設計師是無法使用的。但opengl就不同了,opengl給硬體廠商和程式設計師提供了擴充套件機制,讓硬體廠商增加基於顯示...
OpenGL系統設計 擴充套件建模 3
除了直線的寬度可以根據需要進行改變外,直線的線型也可以改變。gllinestipple就可以提供不同於常規的連續線段的中心線 虛線 點劃線等等。其函式原型如下 void gllinestipple glint factor glushort pattern 其中 factor factor為3 那麼...