OpenGL - 维基百科,自由的百科全书
文章推薦指數: 80 %
OpenGL(英語:Open Graphics Library,譯名:開放圖形庫或者“開放式圖形庫”)是用於渲染2D、3D矢量圖形的跨語言、跨平台的應用程序編程接口(API)。
OpenGL
應用程序編程接口,用於渲染2維和3維矢量圖形
語言
監視
編輯
提示:此條目的主題不是OpenCL。
OpenGL(英語:OpenGraphicsLibrary,譯名:開放圖形庫或者「開放式圖形庫」)是用於彩現2D、3D向量圖形的跨語言、跨平台的應用程式編程介面(API)。
這個介面由近350個不同的函式呼叫組成,用來從簡單的圖形位元繪製複雜的三維景象。
而另一種程式介面系統是僅用於MicrosoftWindows上的Direct3D。
OpenGL常用於CAD、虛擬實境、科學視覺化程式和電子遊戲開發。
OpenGL原作者矽谷圖形公司(SGI)開發者KhronosGroup初始版本1992年6月30日,30年前(1992-06-30)穩定版本4.6(2017年7月31日,4年前(2017-07-31))
程式語言C作業系統跨平台類型API許可協定多種[1]網站https://www.opengl.org/OpenGL的高效實現(利用圖形加速硬體)存在於Windows,部分UNIX平台和MacOS。
這些實現一般由顯示裝置廠商提供,而且非常依賴於該廠商提供的硬體。
開放原始碼函式庫Mesa是一個純基於軟體的圖形API,它的代碼相容於OpenGL。
但是,由於許可證的原因,它只聲稱是一個「非常相似」的API。
OpenGL規範由1992年成立的OpenGL架構評審委員會(ARB)維護。
ARB由一些對建立一個統一的、普遍可用的API特別感興趣的公司組成。
根據OpenGL官方網站,2002年6月的ARB投票成員包括3Dlabs、AppleComputer、ATITechnologies、DellComputer、Evans&Sutherland(英語:Evans&Sutherland)、Hewlett-Packard、IBM、Intel、Matrox、NVIDIA、SGI和SunMicrosystems,Microsoft曾是創立成員之一,但已於2003年3月退出。
目次
1設計
2文檔
3相關程序庫
3.1上下文與窗口套件
4歷史
5高級功能
6版本
7參見
8參考文獻
9外部連結
設計編輯
圖形管線
OpenGL規範描述了繪製2D和3D圖形的抽象API。
儘管這些API可以完全通過軟體實現,但它是為大部分或者全部使用硬體加速而設計的。
OpenGL的API定義了若干可被客戶端程式調用的函式,以及一些具名整型常數(例如,常數GL_TEXTURE_2D對應的十進制整數為3553)。
雖然這些函式的定義表面上類似於C程式語言,但它們是語言獨立的。
因此,OpenGL有許多語言綁定,值得一提的包括:JavaScript綁定的WebGL(基於OpenGLES2.0在Web瀏覽器中的進行3D彩現的API);C綁定的WGL、GLX和CGL;iOS提供的C綁定;Android提供的Java和C綁定。
OpenGL不僅語言無關,而且平台無關。
規範隻字未提獲得和管理OpenGL上下文相關的內容,而是將這些作為細節交給底層的窗口系統。
出於同樣的原因,OpenGL純粹專注於彩現,而不提供輸入、音訊以及窗口相關的API。
OpenGL是一個不斷進化的API。
新版OpenGL規範會定期由KhronosGroup發布,新版本通過擴展API來支援各種新功能。
每個版本的細節由KhronosGroup的成員一致決定,包括顯示卡廠商、作業系統設計人員以及類似Mozilla和Google的一般性科技公司。
除了核心API要求的功能之外,GPU供應商可以通過擴展的形式提供額外功能。
擴展可能會引入新功能和新常數,並且可能放鬆或取消現有的OpenGL函式的限制。
然後一個擴充就分成兩部分發布:包含擴充函式原型的標頭檔和作為廠商的裝置驅動。
供應商使用擴展公開自訂的API而無需獲得其他供應商或KhronosGroup的支援,這大大增加了OpenGL的靈活性。
OpenGLRegistry負責所有擴展的收集和定義。
每個擴展都與一個簡短的標識符關聯,該標識符基於開發公司的名稱。
例如,英偉達(NVIDIA)的標識符是NV。
如果多個供應商同意使用相同的API來實現相同的功能,那麼就用EXT標誌符。
這種情況更進一步,KhronosGroup的架構評審委員(ArchitectureReviewBoard,ARB)正式批准該擴展,那麼這就被稱為一個「標準擴展」,標識符使用ARB。
第一個ARB擴展是GL_ARB_multitexture。
OpenGL每個新版本中引入的功能,特別是ARB和EXT類型的擴展,通常由數個被廣泛實現的擴展功能組合而成。
文件編輯
OpenGL普及的部分原因是其高品質的官方檔案。
OpenGL架構評審委員會隨規範一同發布一系列包含API變化更新的手冊。
這些手冊因其封面顏色而眾所周知。
紅寶書DaveShreiner,GrahamSellers,JohnM.KessenichandBillM.Licea-Kane.2013.OpenGLProgrammingGuide:TheOfficialGuidetoLearningOpenGL,Version4.3(8thEdition).Addison-WesleyProfessional.ISBN978-0321773036.
橙寶書RandiJ.Rost,BillM.Licea-Kane,DanGinsburg,JohnM.Kessenich,BartholdLichtenbelt,HughMalanandMikeWeiblen.2009.OpenGLShadingLanguage(3rdEdition).
Addison-WesleyProfessional.ISBN978-0321637635
相關程式庫編輯
早期的OpenGL版本會一同發布配套的GLU庫,提供一些同時代硬體尚不支援的簡單功能。
GLU最後一次更新規格要求是在1998年,對已棄用的OpenGL特性有依賴。
還有幾個庫也建立在OpenGL之上,提供了OpenGL本身沒有的功能:
GLFW
GLUT
GLEW(英語:GLEW)、GLEE(英語:GLEE)特別是,OpenGLPerformer(英語:OpenGLPerformer)庫——由SGI開發並可以在IRIX、Linux和MicrosoftWindows的一些版本上使用,構建於OpenGL,可以建立即時視覺化仿真程式。
當開發者需要使用最新的OpenGL擴充時,他們往往需要使用GLEW(英語:GLEW)庫或者是GLEE(英語:GLEE)庫提供的功能,可以在程式的執行期判斷當前硬體是否支援相關的擴充,防止程式崩潰甚至造成硬體損壞。
這類庫利用動態載入技術(dlsym、GetProcAddress等函式)搜尋各種擴展的資訊。
上下文與窗口套件編輯
OpenGL上下文(英語:OpenGLcontext)的建立過程相當複雜,在不同的作業系統上也需要不同的做法。
因此很多遊戲開發和使用者介面庫都提供自動建立OpenGL上下文的功能,其中包括SDL、Allegro、SFML(英語:SFML)、FLTK、Qt等。
也有一些庫是專門用來建立OpenGL窗口的,其中最早的便是GLUT,後被freeglut取代,比較新的也有GLFW可以使用。
[2]
以下套件可以用來建立並管理OpenGL窗口,也可以管理輸入,但幾乎沒有除此以外的其它功能:
GLFW——跨平台窗口和鍵盤、滑鼠、手柄處理;偏向遊戲
freeglut——跨平台窗口和鍵盤、滑鼠處理;API是GLUTAPI的超集,同時也比GLUT更新、更穩定
GLUT——早期的窗口處理庫,已不再維護
支援建立OpenGL窗口的還有一些「多媒體庫」,同時還支援輸入、聲音等類似遊戲的程式所需要的功能:
Allegro5——跨平台多媒體庫,提供針對遊戲開發的CAPI
SDL——跨平台多媒體庫,提供CAPI
SFML(英語:SFML)——跨平台多媒體庫,提供C++API;同時也提供C#、Java、Haskell、Go等語言的繫結
窗口套件
FLTK——小型的跨平台C++窗口組件庫
Qt——跨平台C++窗口組件庫,提供許多OpenGL輔助物件
wxWidgets——跨平台C++窗口組件庫歷史編輯
1980年代,開發可以用在各種各樣圖形硬體上的軟體是個真正的挑戰。
通常,軟體開發人員為每種硬體編寫自訂的介面和驅動程式。
但這非常昂貴並會導致大量工作的重複。
20世紀90年代初,SGI成為工作站3D圖形領域的領導者。
其IRISGL的API被認為是最先進的科技並成為事實上的行業標準,而基於開放標準的PHIGS則相形見絀。
IRISGL更容易使用,而且還支援即時模式的彩現。
相比之下,PHIGS難於使用並且功能老舊。
SGI的競爭對手(包括Sun、惠普和IBM)通過擴展PHIGS標準也能將3D硬體投入市場。
這反過來導致SGI市場份額的削弱,因為有越來越多的3D圖形硬體供應商進入市場。
爲攻佔市場,SGI決定把IRISGLAPI轉變為一項開放標準,即OpenGL。
然而,SGI擁有大量的軟體客戶,對他們來說從IRISGL遷移到OpenGL將需要巨額投資。
此外,IRISGL的應用程式介面擁有與3D圖形不相關的函式。
例如,它包括窗口、鍵盤和鼠標的API,部分原因是由於它是在XWindow系統和Sun公司的NeWS系統之前開發的。
而且,IRISGL庫由於授權和專利問題並不適合開放。
上述種種因素要求SGI繼續支援先進和專有的IRISInventor和IRISPerformer應用程式介面。
IRISGL的限制之一是只能存取由底層硬體支援的功能。
如果圖形硬體不支援一項功能,那麼該應用程式將不能使用它。
OpenGL通過為硬體不具備的功能提供軟體支援克服此問題,這就允許應用程式在相對較弱的系統中使用先進的圖形技術。
OpenGL標準化存取硬體的方式:硬體介面程式的開發(有時也稱為裝置驅動程式)交由硬體製造商,而窗口功能委託給底層作業系統。
讓大量不同種類的圖形硬體講同一種語言影響深遠,它為軟體開發者進行3D軟體發展提供更高層次的平台。
1992年,SGI公司領導OpenGL架構審查委員會(OpenGLARB)的建立。
該委員會由若干公司組成,負責未來OpenGL規範的維護和擴充。
微軟在1995年發布Direct3D,Direct3D最終成為OpenGL的主要競爭對手。
1997年12月17日,微軟和SGI發起華氏溫標項目,旨在統一OpenGL和Direct3D的介面。
1998年,惠普加入。
後來,由於SGI的財政限制、微軟的戰略以及缺乏行業普遍支援,項目1999年遭棄。
2006年7月,OpenGL架構評審委員會投票決定將OpenGLAPI標準的控制權交給KhronosGroup。
進階功能編輯
OpenGL被設計為只有輸出的,所以它只提供彩現功能。
核心API沒有視窗系統、音訊、列印、鍵盤/滑鼠或其他輸入裝置的概念。
雖然這一開始看起來像是一種限制,但它允許進行彩現的代碼完全獨立於他執行的作業系統,允許跨平台開發。
然而,有些整合於原生視窗系統的東西需要允許和宿主系統互動。
這通過下列附加API實現:
GLX-X11(包括透明的網路)
WGL-MicrosoftWindows另外,GLUT庫能夠以可移植的方式提供基本的視窗功能。
版本編輯
OpenGL進化自(而且風格很相似)SGI的早期3D介面IRISGL。
IRISGL的一個限制是它只能存取底層硬體提供的特性。
如果圖形硬體不支援例如紋理對映這樣的功能,那麼應用程式就不能使用它。
OpenGL通過在軟體上對硬體不支援的特性提供支援的方法克服了這個問題,允許應用程式在相對低組態的系統上使用進階的圖形特性。
Fahrenheit專案是Microsoft和SGI之間的聯合行動,為了統一OpenGL和Direct3D介面的目的。
它一開始提出了一些把規則帶給互動3D電腦圖形API世界的承諾,但因為SGI的財政限制,這個專案後來被放棄了。
2002年微軟的DirectX9提出了全新的Shader繪圖功能以及高階著色語言(HLSL),OpenGL霸主地位開始被瓦解。
這使得3DLabs了解到必須開發全新的OpenGL2.0版本,但僅加入支援GLSL的功能。
2006年Khronos接手OpenGL,立刻著手發展LongsPeak與MountEvans。
2008年推出OpenGL3,但評價普遍不高。
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日
OpenGL3.3與4.0版一起發布。
以體現硬體支援Direct3D10的可能性。
4.0
2010年3月11日
OpenGL4.0與版本3.3一起發布。
它是為硬體設計的,以體現硬體支援Direct3D11的可能性。
與OpenGL3.0一樣,這個版本的OpenGL包含大量相當無關緊要的擴充,旨在徹底揭示Direct3D11級硬體的能力。
4.1
2010年7月26日
4.2
2011年8月8日
支援的顯示卡:NVIDIAGeForce400系列以上,AMDRadeonHD7000系列以上,IntelHDGraphics(第7代IvyBridge系列以上)
AMDRadeonHD6000Series,AMDRadeonHD7000Series
支援Shaders原子計數器和載入/儲存/原子讀-修改-寫操作的單級紋理著色器。
捕捉GPU-tessellated幾何變換回饋的結果繪製的多個實例,使複雜的物件進行有效的重新定位和複製。
支援修改任意子集的壓縮紋理,而無需重新下載整個GPU的紋理,顯著的效能改進。
支援包裝成一個單一的32位元值顯著降低記憶體儲存和頻寬的高效著色處理多個8位元和16位元值。
4.3
2012年8月6日
支援的顯示卡:NVIDIAGeForce400系列以上,AMDRadeonHD5000系列以上,IntelHDGraphics(第7.5代Haswell系列以上)
圍內充分利用GPU的並行計算著色器的圖形管道
暗器的儲存緩衝區物件
紋理參數查詢
作為標準功能的高品質的紋理壓縮ETC2/EAC
完全相容的OpenGLES3.0的API
在應用程式開發過程中除錯能力接收除錯訊息
沒有數據複製以不同的方式解釋紋理的紋理意見
增加了記憶體的安全性
一個多應用的健壯性擴展4.4
2013年7月22日[3]
支援的顯示卡:NVIDIAGeForce400系列以上,AMDRadeonHD5000系列以上,IntelHDGraphics(第7.5代Haswell系列以上)
緩衝區位置控制
高效異步查詢
著色器可變佈局
高效多物件綁定
精簡化Direct3D應用的移植
非綁定的紋理擴展
稀疏紋理擴展4.5
2014年8月11日[4]
支援的顯示卡:NVIDIAGeForce400系列以上,AMDRadeonHD7000系列以上,IntelHDGraphics(第8代Broadwell系列以上),TegraK1,TegraX1
直接狀態存取(DSA)-物件存取器使查詢和修改狀態不會將物件繫結到上下文中,從而提高應用程式和中介軟體的效率和靈活性
重新整理控制-應用程式可以在上下文交換之前控制掛起命令的重新整理,實現高效能多執行緒應用程式
魯棒性-為WebGL瀏覽器等應用程式提供安全平台,包括阻止GPU復位影響任何其他正在執行的應用程式
OpenGLES3.1API和著色器相容性-可輕鬆開發和執行桌面系統上最新的OpenGLES應用程式4.6
2017年7月31日
支援的顯示卡:NVIDIAGeForce400系列以上(理論上可支援)
SPIR-V著色器
各向異性過濾參見編輯
KhronosGroup
OpenGLES參考文獻編輯
^OpenGL®LicensingandLogos.SiliconGraphicsInternationalCorp.[2013-12-15].(原始內容存檔於2012-11-01)(英語).
^GLUT-likeWindowingtoolkits.KhronosGroup.[2018-07-19].(原始內容存檔於2018-07-19)(英語).
^KhronosReleasesOpenGL4.4Specification.KhronosGroup.2013-07-22[2013-12-15].(原始內容存檔於2013-10-29)(英語).
^OpenGL4.5released,next-genOpenGLunveiled:Cross-platformMantlekiller,DX12competitor.ExtremeTech.2014-08-11[2014-08-12].(原始內容存檔於2014-08-11).
外部連結編輯
OpenGL官方網站(頁面存檔備份,存於網際網路檔案館)
KhronosGroup官方網站(頁面存檔備份,存於網際網路檔案館)
取自「https://zh.wikipedia.org/w/index.php?title=OpenGL&oldid=69345921」
延伸文章資訊
- 1AMD發布22.7.1顯卡驅動:OpenGL性能直接翻倍
一直以來,AMD顯卡的OpenGL性能都是備受玩家詬病的一點,在最新推送的22.7.1版本更新中,這一問題終於得到了解決。 根據AMD展示的測試結果,更新驅動 ...
- 2操作方法:检查显卡类型和OpenGL 版本 - Esri Support
通常,OpenGL 驱动程序与图形驱动程序和支持软件(如DirectX)的其余部分安装在一起。 过程. 提供的说明描述了如何检查系统上安装了哪种类型的显卡,以及正在运行的 ...
- 3OpenGL - 维基百科,自由的百科全书
OpenGL(英語:Open Graphics Library,譯名:開放圖形庫或者“開放式圖形庫”)是用於渲染2D、3D矢量圖形的跨語言、跨平台的應用程序編程接口(API)。
- 4一般顯示卡與工作站繪圖卡的差別 - iT 邦幫忙
這個比較起來意義不大你要用來跑Autodesk的軟體基本上就是選Nvidia Quadro系列的因為一般顯示卡是針對Directx 繪圖卡是對OpenGL 如果你們以前都是用工作站級那我建議你 ...
- 5升級或者重新安裝顯卡驅動程式教學 - 雷電模擬器
開啟模擬器的時候提示“OPENGL版本過低,更新顯示卡驅動程式” 4.部分遊戲卡頓和崩潰問題也可以解決. 如何獲知電腦顯卡型號; NVDIA獨立顯卡驅動程式升級教學; AMD獨立顯卡 ...