OpenGL

維基百科,自由的百科全書
跳到: 導覽搜尋
OpenGL
OpenGL logo
原作者 矽谷圖形公司SGI
開發者 Khronos Group
穩定版本 4.5[1] / 2014年8月11日;14天前 (2014-08-11)
程式語言 C
作業系統 跨平台
類別 API
許可協定 多種[2]
網站 http://www.opengl.org

開放圖形庫英語Open Graphics Library縮寫OpenGL)是個定義了一個跨程式語言跨平台應用程式介面(API)的規范,它用於生成二維三維圖像。這個介面由近三百五十個不同的函數呼叫組成,用來從簡單的圖形位元繪製複雜的三維景象。而另一種程式介面系統是僅用於Microsoft Windows上的Direct3D。OpenGL常用於CAD虛擬實境、科學視覺化程式和電子遊戲開發

OpenGL的高效實現(利用了圖形加速硬件)存在於Windows,很多UNIX平台和Mac OS。這些實現一般由顯示器材廠商提供,而且非常依賴於該廠商提供的硬件。開放源碼函數庫Mesa是一個純基於軟件的圖形API,它的代碼相容於OpenGL。但是,由於許可證的原因,它只聲稱是一個「非常相似」的API。

OpenGL規範由1992年成立的OpenGL架構評審委員會(ARB)維護。ARB由一些對建立一個統一的、普遍可用的API特別感興趣的公司組成。根據OpenGL官方網站,2002年6月的ARB投票成員包括3DlabsApple ComputerATI TechnologiesDell ComputerEvans & SutherlandHewlett-PackardIBMIntelMatroxNVIDIASGISun MicrosystemsMicrosoft曾是創立成員之一,但已於2003年3月退出。

設計[編輯]

圖形管線

OpenGL規範描述了繪製2D和3D圖形的抽象API。儘管這些API可以完全通過軟件實現,但它是為大部分或者全部使用硬件加速而設計的。

OpenGL的API定義了若干可被客戶端程式調用的函數,以及一些具名整型常數(例如,常數GL_TEXTURE_2D對應的十進制整數為3553)。雖然這些函數的定義表面上類似於C編程語言,但它們是語言獨立的。因此,OpenGL有許多語言綁定,值得一提的包括:JavaScript綁定的WebGL(基於OpenGL ES 2.0在Web瀏覽器中的進行3D渲染的API);C綁定的WGL、GLX和CGL;iOS提供的C綁定;Android提供的Java和C綁定。

OpenGL不僅語言無關,而且平台無關。規範隻字未提獲得和管理OpenGL上下文相關的內容,而是將這些作為細節交給底層的窗口系統。出於同樣的原因,OpenGL純粹專注於渲染,而不提供輸入、音頻以及窗口相關的API。

OpenGL是一個不斷進化的API。新版OpenGL規範會定期由Khronos Group發佈,新版本通過擴展API來支援各種新功能。每個版本的細節由Khronos Group的成員一致決定,包括顯示卡廠商、作業系統設計人員以及類似Mozilla谷歌的一般性技術公司

除了核心API要求的功能之外,GPU供應商可以通過擴展的形式提供額外功能。擴展可能會引入新功能和新常數,並且可能放鬆或取消現有的OpenGL函數的限制。然後一個擴充功能就分成兩部分發行:包含擴充功能函數原型的表頭檔和作為廠商的器材驅動。供應商使用擴展公開自定義的API而無需獲得其他供應商或Khronos Group的支援,這大大增加了OpenGL的靈活性。OpenGL Registry負責所有擴展的收集和定義。

每個擴展都與一個簡短的標識符關聯,該標識符基於開發公司的名稱。例如,英偉達(nVidia)的標識符是NV。如果多個供應商同意使用相同的API來實現相同的功能,那麼就用EXT標誌符。這種情況更進一步,Khronos Group的架構評審委員(Architecture Review Board,ARB)可能「祝福」該擴展,那麼這就被稱為一個「標準擴展」,標識符使用ARB。第一個ARB擴展是GL_ARB_multitexture。

OpenGL每個新版本中引入的功能,特別是ARB和EXT類型的擴展,通常由數個被廣泛實現的擴展功能組合而成。

文檔[編輯]

OpenGL普及的部分原因是其高質量的官方檔案。OpenGL架構評審委員會隨規範一同發佈了一系列包含API變化更新的手冊。這些手冊因其封面顏色而眾所周知。

  • 紅寶書

Dave Shreiner, Graham Sellers, John M. Kessenich and Bill M. Licea-Kane. 2013. OpenGL Programming Guide: The Official Guide to Learning OpenGL, Version 4.3 (8th Edition). Addison-Wesley Professional. ISBN 978-0321773036.

  • 橙寶書

Randi J. Rost, Bill M. Licea-Kane, Dan Ginsburg, John M. Kessenich, Barthold Lichtenbelt, Hugh Malan and Mike Weiblen. 2009. OpenGL Shading Language (3rd Edition). Addison-Wesley Professional. ISBN 978-0321637635

相關程式庫[編輯]

幾個庫建立在OpenGL之上,提供了OpenGL本身沒有的功能:

特別是,OpenGL Performer庫——由SGI開發並可以在IRIXLinuxMicrosoft Windows的一些版本上使用,構建於OpenGL,可以建立即時視覺化仿真程式。

當開發者需要使用最新的OpenGL擴充功能時,他們往往需要使用GLEW庫或者是GLEE庫提供的功能,可以在程式的執行期判斷當前硬件是否支援相關的擴充功能,防止程式崩潰甚至造成硬件損壞。這類庫利用動態加載技術(dlsym、GetProcAddress等函數)搜尋各種擴展的資訊。

歷史[編輯]

1980年代,開發可以用在各種各樣圖形硬件上的軟件是個真正的挑戰。通常,軟件開發人員為每種硬件編寫自定義的介面和驅動程式。但這非常昂貴並會導致大量工作的重複。

20世紀90年代初,SGI成為工作站3D圖形領域的領導者。其IRIS GL的API被認為是最先進的科技並成為事實上的行業標準,而基於開放標準的PHIGS則相形見絀。IRIS GL更容易使用,而且還支援即時模式的渲染。相比之下,PHIGS難於使用並且功能老舊。

SGI的競爭對手(包括Sun惠普IBM)通過擴展PHIGS標準也能將3D硬件投入市場。這反過來導致SGI市場份額的削弱,因為有越來越多的3D圖形硬件供應商進入市場。爲攻佔市場,SGI決定把IRIS GL API轉變為一項開放標準,即OpenGL。

然而,SGI擁有大量的軟件客戶,對他們來說從IRIS GL遷移到OpenGL將需要巨額投資。此外,IRIS GL的應用程式介面擁有與3D圖形不相關的函數。例如,它包括窗口、鍵盤和鼠標的API,部分原因是由於它是在X Window系統和Sun公司的NeWS系統之前開發的。而且,IRIS GL庫由於授權和專利問題並不適合開放。上述種種因素要求SGI繼續支援先進和專有的IRIS Inventor和IRIS Performer應用程式介面。

IRIS GL的限制之一是只能存取由底層硬件支援的功能。如果圖形硬件不支援一項功能,那麼該應用程式將不能使用它。OpenGL通過為硬件不具備的功能提供軟件支援克服了此問題,這就允許應用程式在相對較弱的系統中使用先進的圖形技術。OpenGL標準化了存取硬件的方式:硬件介面程式的開發(有時也稱為設備驅動程式)交由硬件製造商,而窗口功能委託給底層作業系統。讓大量不同種類的圖形硬件講同一種語言影響深遠,它為軟件開發者進行3D軟件發展提供了更高層次的平台。

1992年,SGI公司領導了OpenGL架構審查委員會(OpenGL ARB)的創建。該委員會由若干公司組成,負責未來OpenGL規範的維護和擴充。

微軟在1995年發佈Direct3D,Direct 3D最終成為OpenGL的主要競爭對手。1997年12月17日,微軟和SGI發起華氏溫標項目,旨在統一OpenGL和Direct3D的介面。1998年,惠普加入。後來,由於SGI的財政限制、微軟的戰略以及缺乏行業普遍支援,項目1999年遭棄。

2006年7月,OpenGL架構評審委員會投票決定將OpenGL API標準的控制權交給Khronos Group。

繫結[編輯]

為了加強它的多語言和多平台特性,已經用很多語言開發了OpenGL的各種繫結和移植。最值得注意的是,Java3D庫已經可以利用OpenGL(另一個選擇可能是DirectX)作為它的硬件加速了。OpenGL官方網頁 [1] 列出了用於JavaFortran 90PerlPikePythonAdaVisual Basic的多個繫結。

高階功能[編輯]

OpenGL被設計為只有輸出的,所以它只提供渲染功能。核心API沒有視窗系統、音訊、打印、鍵盤/滑鼠或其他輸入器材的概念。雖然這一開始看起來像是一種限制,但它允許進行渲染的代碼完全獨立於他執行的作業系統,允許跨平台開發。然而,有些整合於原生視窗系統的東西需要允許和宿主系統互動。這透過下列附加API實現:

另外,GLUT庫能夠以可移植的方式提供基本的視窗功能。

版本[編輯]

OpenGL進化自(而且風格很相似)SGI的早期3D介面IRIS GL。IRIS GL的一個限制是它只能存取底層硬件提供的特性。如果圖形硬件不支援例如紋理對映這樣的功能,那麼應用程式就不能使用它。OpenGL透過在軟件上對硬件不支援的特性提供支援的方法克服了這個問題,允許應用程式在相對低配置的系統上使用高階的圖形特性。Fahrenheit專案是Microsoft和SGI之間的聯合行動,為了統一OpenGL和Direct3D介面的目的。它一開始提出了一些把規則帶給互動3D電腦圖形API世界的承諾,但因為SGI的財政限制,這個專案後來被放棄了。

2002年微軟的DirectX 9提出了全新的Shader繪圖功能以及高階着色語言 (HLSL),OpenGL霸主地位開始被瓦解。這使得3DLabs了解到必須開發全新的OpenGL 2.0版本,但僅加入支援GLSL的功能。2006年Khronos接手OpenGL,立刻着 手發展Longs Peak與Mount Evans。2008年推出OpenGL 3,但評價普遍不高。

2010年3月10日, OpenGL同時推出了3.3和4.0版本,同年7月26日又發行了4.1版本。2011年8月8日發行4.2版本。2013年發佈4.3版。

主要版本 發行日期 重要變更
1.1 1997年1月
1.2 1998年3月16日
1.2.1 1998年10月14日
1.3 2001年8月14日
1.4 2002年7月24日
1.5 2003年7月29日
2.0 2004年9月7日
2.1 2006年7月2日
3.0 2008年8月11日
3.1 2009年3月24日
3.2 2009年8月3日
3.3 2010年3月11日
4.0 2010年3月11日
4.1 2010年7月26日
4.2 2011年8月8日 支援的顯示卡: Nvidia GeForce 400 series, Nvidia GeForce 500 series, Nvidia GeForce 600 series, ATI Radeon HD 5000 series,

AMD Radeon HD 6000 Series, AMD Radeon HD 7000 Series

  • 支援Shaders原子計數器和載入/儲存/原子 讀-修改-寫操作的單級紋理着色器。
  • 捕捉GPU-tessellated幾何變換反饋的結果繪製的多個例項,使複雜的物件進行有效的重新定位和複製。
  • 支援修改任意子集的壓縮紋理,而無需重新下載整個GPU的紋理, 顯著的效能改進。
  • 支援包裝成一個單一的32位元值顯著降低記憶體儲存和頻寬的高效着色處理多個8位元和16位元值。
4.3 2012年8月6日 支援的顯示卡:NVIDIA GeForce400系列,NVIDIA GeForce500系列,NVIDIA GeForce600系列,NVIDIA GeForce700系列,ATI Radeon HD 5000系列,AMD Radeon HD6000系列,AMD Radeon HD7000系列,AMD Radeon HD8000系列
  • 圍內充分利用GPU的並行計算着色器的圖形管道
  • 暗器的存儲緩衝區對象
  • 紋理參數查詢
  • 作為標準功能的高質素的紋理壓縮ETC2/EAC
  • 完全相容的OpenGL ES3.0的API
  • 在應用程式開發過程中調試能力接收調試訊息
  • 沒有數據複製以不同的方式解釋紋理的紋理意見
  • 增加了內存的安全性
  • 一個多應用的健壯性擴展
4.4 2013年7月22日[3] 支援的顯示卡:NVIDIA GeForce 400系列、NVIDIA GeForce 500系列、NVIDIA GeForce 600系列、NVIDIA GeForce 700系列,ATI Radeon HD 5000系列、AMD Radeon HD6000系列、AMD Radeon HD7000系列、AMD Radeon R9/R7 200系列
  • 緩衝區位置控制
  • 高效異步查詢
  • 着色器可變佈局
  • 高效多對象綁定
  • 精簡化Direct3D應用的移植
  • 非綁定的紋理擴展
  • 稀疏紋理擴展
4.5 2014年8月11日[1]

參考文獻[編輯]

  1. ^ 1.0 1.1 OpenGL 4.5 released, next-gen OpenGL unveiled: Cross-platform Mantle killer, DX12 competitor. ExtremeTech. 2014-08-11 [2014-08-12]. 
  2. ^ OpenGL® Licensing and Logos. Silicon Graphics International Corp. [2013-12-15] (英文). 
  3. ^ Khronos Releases OpenGL 4.4 Specification. Khronos Group. 2013-07-22 [2013-12-15] (英文). 

外部連結[編輯]

參見[編輯]