OpenGL系統設計 OpenGL擴充套件

2021-05-09 12:28:16 字數 2906 閱讀 8930

和微軟的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 那麼...