和微軟的direct3d/directgraphics相比較,opengl的乙個最大的優點是其擴充套件機制。對於顯示卡硬體的新功能,除非微軟發布了directx的新版本,否則,程式設計師是無法使用的。但opengl就不同了,opengl給硬體廠商和程式設計師提供了擴充套件機制,讓硬體廠商增加基於顯示卡的新功能,程式設計師通過擴充套件就可以使用這些新功能。
對程式設計師來說,並不希望總是更新自己的顯示卡來使用新功能,硬體廠商就提供了更新的顯示卡取得程式來滿足要求。實際上,硬體廠商一直在這麼作。這樣,程式設計師可以通過公升級自己顯示卡的驅動程式來使用opengl擴充套件。
所謂擴充套件,就是在opengl某乙個版本的基礎上,如1.1,增加的擴充套件功能。這些擴充套件功能可能會在新版本中成為基本功能。
但是任何事物都是有利有弊,由於有些擴充套件是硬體廠商完全針對自身開發的,因此使用某些針對特定顯示卡的擴充套件很有可能無法在另一種顯示卡上執行。這樣,就會出現某些應用程式在一種顯示卡上執行很好,但在另一種顯示卡上效果卻很一般。例如,doom3為了將顯示技術發揮到極致,就分別針對nvidia和ati寫了取得,裡面就用到了各自特定的擴充套件。針對擴充套件不統一的問題,opengl arb也想了一些辦法。首先,是統一成標準擴充套件,其次是減少擴充套件數目。這些目標預計將在opengl 2.0中實現。
opengl的副檔名是有規律的,這些有助於程式設計師了解擴充套件的意義從而去使用。擴充套件是有副檔名來體現的,硬體所支援的所有擴充套件可以通過glgetstring( gl_extensions )來獲取的。glgetstring( gl_extensions )返回的字串包含了所有的副檔名,每個副檔名以空格隔開。
副檔名分為三部分組成,第一部分表示是針對opengl的哪一部分的擴充套件,第二部分表示開發擴充套件的機構,第三部分則表示擴充套件的含義,沒有嚴格的要求,三部分以下劃線連線,形成乙個完整的副檔名。如gl_arb_multitexture。表1-2給出了副檔名的三部分的說明。 表
1-2opengl
副檔名含義
副檔名說明
例子第一部分
gl針對
opengl
核心的擴充套件
gl_arb_multitexture
wgl針對
windows
平台的擴充套件
wgl_arb_buffer_region
glx針對
unix/linux
平台的擴充套件
glx_ext_visual_info
glu針對
opengl
實用庫的擴充套件
glu_ext_nurbs_tessellator
第二部分
arb經
opengl arb
正式核准的擴充套件,往往由廠商開發的擴充套件發展而來,如果同時存在廠商開發的擴充套件和
arb擴充套件,應該優先使用
arb擴充套件
gl_arb_texture_env_add
ext被多個硬體廠商支援的擴充套件
gl_ext_vertex_array
nvnvidia
公司開發的擴充套件
gl_nv_texture_shader
atiati
公司開發的擴充套件
gl_ati_texture_mirror_once
sgisgi
公司開發的擴充套件
glx_sgi_video_sync
sgix
sgi公司開發的實驗性擴充套件
gl_sgix_fog_offset
ibmibm
公司開發的擴充套件
gl_ibm_static_data
win微軟公司開發的擴充套件
gl_win_specular_fog
sgis
sgi公司開發的擴充套件
gl_sgis_fog_function
hphp
公司開發的擴充套件
gl_hp_image_transform
intel
intel
公司開發的擴充套件
gl_intel_texture_scissor
公司開發的擴充套件
sunsun
公司開發的擴充套件
gl_sun_slice_accum
sunx
sun公司開發的實驗性擴充套件
gl_sunx_constant_data
ingr
intergraph
公司開發的擴充套件
gl_ingr_color_clamp
mesa
mesa
公司開發的擴充套件
glx_mesa_pixmap_colormap
3dfx
3dfx
公司開發的擴充套件
gl_3dfx_multisample
omlopenml
擴充套件gl_oml_interlace
i3dinteractive 3d graphics
組織開發的擴充套件
wgl_i3d_digital_video_control s3
s3公司開發的擴充套件
gl_s3_s3tc
pgipgi
公司開發的擴充套件
gl_pgi_misc_hints
第三部分
accum
accumulation buffer
gl_sun_slice_accum
envenvironment
gl_ext_texture_env
vertex
gl_sgix_vertex_preclip
list
display list
gl_sun_********_list
……opengl
擴充套件往往都會新增一些函式,或者新的狀態變數。通過這些新的函式或狀態變數來獲取使用新功能。
由於眾所周知的原因,目前的windows平台上的opengl32.dll仍然只支援opengl1.1版本,而不是最新的1.5,因此,如果要使用如多重紋理這樣的功能就必須通過擴充套件來實現。
openg離線包 OpenGL離線渲染和緩衝區物件
理論 輸入 影象,點,線。輸出 影象 實現方案 從一般到特殊 1.不支援fbo 主要介紹pc上,移動裝置如果不支援fbo要實現離線渲染那就實在沒轍了。gldrawbuffer gl back glreadbuffer gl back 設定讀寫時後快取區。一般pc都支援雙緩衝機制,如果沒有gl bac...
OpenGL學習筆記之一 什麼是OpenGL
opengl到底是什麼?制定並維護的規範 specification opengl規範嚴格規定了每個函式該如何執行,以及它們的輸出值。至於內部具體每個函式是如何實現 implement 的,將由opengl庫的開發者自行決定 譯註 這裡開發者是指編寫opengl庫的人 因為opengl規範並沒有規定...
OpenGL系統設計 擴充套件建模 3
除了直線的寬度可以根據需要進行改變外,直線的線型也可以改變。gllinestipple就可以提供不同於常規的連續線段的中心線 虛線 點劃線等等。其函式原型如下 void gllinestipple glint factor glushort pattern 其中 factor factor為3 那麼...