OpenGL

OpenGL。這個介面由近350個不同的函式呼叫組成，用來從簡單的圖形位元繪製複雜的三維景象。而另一種程式介面系統是僅用於Microsoft Windows上的Direct3D。OpenGL常用於CAD、虛擬實境、科學視覺化程式和電子遊戲開發。OpenGL的高效實現存在於Windows，部分UNIX平臺和Mac OS。這些實現一般由顯示裝置廠商提供，而且非常依賴於該廠商提供的硬體。開放原始碼函式庫Mesa是一個純基於軟體的圖形API，它的程式碼相容於OpenGL。但是，由於許可證的原因，它只聲稱是一個“非常相似”的API。OpenGL規範由1992年成立的OpenGL架構評審委員會維護。ARB由一些對建立一個統一的、普遍可用的API特別感興趣的公司組成。根據OpenGL官方網站，2002年6月的ARB投票成員包括3Dlabs、Apple Computer、ATI Technologies、Dell Computer、、Hewlett-Packard、IBM、Intel、Matrox、NVIDIA、SGI和Sun Microsystems，Microsoft曾是創立成員之一，但已於2003年3月-{退出}-。設計.OpenGL規範描述了繪製2D和3D圖形的抽象API。儘管這些API可以完全透過軟體實現，但它是為大部分或者全部使用硬體加速而設計的。OpenGL的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負責所有擴充套件的收集和定義。每個擴充套件都與一個簡短的識別符號關聯，該識別符號基於開發公司的名稱。例如，英偉達正式批准該擴充套件，那麼這就被稱為一個“標準擴充套件”，識別符號使用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. 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 版本會一同釋出配套的 GLU 庫，提供一些同時代硬體尚不支援的簡單功能。GLU 最後一次更新規格要求是在 1998 年，對已棄用的 OpenGL 特性有依賴。還有幾個庫也建立在OpenGL之上，提供了OpenGL本身沒有的功能：特別是，庫——由SGI開發並可以在IRIX、Linux和Microsoft Windows的一些版本上使用，構建於OpenGL，可以建立實時視覺化模擬程式。當開發者需要使用最新的OpenGL擴充套件時，他們往往需要使用庫或者是庫提供的功能，可以在程式的執行期判斷當前硬體是否支援相關的擴充套件，防止程式崩潰甚至造成硬體損壞。這類庫利用動態載入技術搜尋各種擴充套件的資訊。上下文與視窗套件.OpenGL 上下文的建立過程相當複雜，在不同的作業系統上也需要不同的做法。因此很多遊戲開發和使用者介面庫都提供自動建立 OpenGL 上下文的功能，其中包括 SDL、Allegro、、FLTK、Qt 等。也有一些庫是專門用來建立OpenGL視窗的，其中最早的便是 GLUT，後被freeglut取代，比較新的也有 GLFW 可以使用。歷史.1980年代，開發可以用在各種各樣圖形硬體上的軟體是個真正的挑戰。通常，軟體開發人員為每種硬體編寫自定義的介面和驅動程式。但這非常昂貴並會導致大量工作的重複。20世紀90年代初，SGI成為工作站3D圖形領域的領導者。其IRIS GL的API被認為是最先進的科技並成為事實上的行業標準，而基於開放標準的PHIGS則相形見絀。IRIS GL更容易使用，而且還支援即時模式的渲染。相比之下，PHIGS難於使用並且功能老舊。SGI的競爭對手透過擴充套件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規範的維護和擴充。微軟在1995年發布Direct3D，Direct 3D最終成為OpenGL的主要競爭對手。1997年12月17日，微軟和SGI發起華氏溫標專案，旨在統一OpenGL和Direct3D的介面。1998年，惠普加入。後來，由於SGI的財政限制、微軟的戰略以及缺乏行業普遍支援，專案1999年遭棄。2006年7月，OpenGL架構評審委員會投票決定將OpenGL API標準的控制權交給Khronos Group。高階功能.OpenGL被設計為只有輸出的，所以它只提供渲染功能。核心API沒有-{zh-cn:視窗系統; zh-tw:視窗系統}-、音訊、列印、鍵盤／滑鼠或其他輸入裝置的概念。雖然這一開始看起來像是一種限制，但它允許進行渲染的程式碼完全獨立於他執行的作業系統，允許跨平臺開發。然而，有些整合於原生-{zh-cn:視窗系統; zh-tw:視窗系統}-的東西需要允許和宿主系統互動。這透過下列附加API實現：另外，GLUT庫能夠以可移植的方式提供基本的-{zh-cn:視窗;zh-tw:視窗}-功能。版本.OpenGL進化自SGI的早期3D介面IRIS GL。IRIS GL的一個限制是它只能訪問底層硬體提供的特性。如果圖形硬體不支援例如紋理對映這樣的功能，那麼應用程式就不能使用它。OpenGL透過在軟體上對硬體不支援的特性提供支援的方法克服了這個問題，允許應用程式在相對低配置的系統上使用高階的圖形特性。Fahrenheit專案是Microsoft和SGI之間的聯合行動，為了統一OpenGL和Direct3D介面的目的。它一開始提出了一些把規則帶給互動3D計算機圖形API世界的承諾，但因為SGI的財政限制，這個專案後來被放棄了。2002年微軟的DirectX 9提出了全新的Shader繪圖功能以及高階著色語言，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版。