一份關於OpenGL的編年史。
【 opengl 1.0 】 1992.7
【 opengl 1.1 】 1995.12
1995 年,SGI 推出了更爲完善的OpenGL 1.1 版本。OpenGL 1.1 的性能比1.0 版提高甚多。其中包括改進打印機支持,在增強元文件中包含OpenGL 的調用,頂點數組( Vertex Array ) 的新特性,提高頂點位置、法線、顏色、色彩指數、紋理座標、多邊形邊緣標識的傳輸速度,引入了新的紋理特性等等。
【 opengl 1.2 】 1998.3
+
三維紋理:以前的OpenGL 只支持一維、二維紋理。
像素格式:新增加了GL_BGRA 等原來沒有的像素格式。允許壓縮的像素格式,例如GL_UNSIGNED_SHORT_5_5_5_1 格式,表示兩個字節,存放RGBA 數據,其中R, G, B 各佔5 個二進制位,A 佔一個二進制位。
圖像處理:新增了一個“圖像處理子集”,提供一些圖像處理的專用功能,例如卷積、計算柱狀圖等。這個子集雖然是標準規定,但是OpenGL 實現時也可以選擇不支持它。
【 opengl 1.2.1 】 1998.10
+
沒有加入任何新的功能,但是引入了“ARB 擴展”的概念。
【 opengl 1.3 】 2001.8
增加了立方紋理貼圖、紋理環境、多重採樣、紋理框架壓縮等擴展指令,但是改進程度非常有限。
+
壓縮紋理 :在處理紋理時,使用壓縮後的紋理而不是紋理本身,這樣可以節省空間(節省顯存)和傳輸帶寬(節省從內存到顯存的數據流量)
多重紋理 :同時使用多個紋理。
多重採樣:一種全屏抗鋸齒技術,使用後可以讓畫面顯示更加平滑,減輕鋸齒現象。對於nvidia 顯卡,在設置時有一項“3D 平滑處理設置”,實際上就是多重採樣。通常可以選擇2x, 4x ,高性能的顯卡也可以選擇8x, 16x 。其它顯卡也幾乎都有類似設置選項,但是也有的顯卡不支持多重採樣,所以是0x 。
【 opengl 1.4 】 2002.7
只加入了深度紋理/陰影紋理、頂點設計框架、自動紋理貼圖等簡單的功能。
+
深度紋理 :可以把深度值像像素值一樣放到紋理中,在繪製陰影時特別有用。
輔助顏色:頂點除了有顏色外還有輔助顏色。在使用光照時可以表現出更真實的效果。
【 opengl 1.5 】 2003.7
包含ARB 制定的“正式擴展規格繪製語言”(OpenGL Shading Language v1.0 ),該語言用於着色對象、頂點着色、片斷着色等擴展功能,同時也將作爲下一代OpenGL 2.0 版本的內核。OpenGL 1.5 的變化還增加了頂點緩衝對象( VBO:Vertex Buffer Object ) 、非乘方紋理( 可提高紋理內存的使用效率) 以及陰影功能、隱蔽查詢功能等等。其主要內容包括
l 頂點Buffer Object :進行頂點配列方式可以提高性能
l Shadow 功能:增加用來比較Shadow 映射的函數
l 隱蔽查詢:爲提高curling 性能採用非同步隱蔽測試
l 非乘方紋理:提高mipmap 等紋理內存的使用效率
l OpenGL Shading Language v1.0 :用於着色(shader) 對象、頂點着色以及片斷着色的擴展功能
+
緩衝對象:允許把數據(主要指頂點數據)交由OpenGL 保存到較高性能的存儲器中,提高繪製速度。比頂點數組有更多優勢。頂點數組只是減少函數調用次數,緩衝對象不僅減少函數調用次數,還加快數據訪問速度。
遮擋查詢:可以計算一個物體有幾個像素會被繪製到屏幕上。如果物體沒有任何像素會被繪製,則不需要加載相關的數據(例如紋理數據)。
【 opengl 2.0 / glsl 1.0 】 2004.9
OpenGL 1.0 推出後的相當長的一段時間裏,OpenGL 唯一做的只是增加了一些擴展指令集,這些擴展指令是一些繪圖功能,像是ClearCoat 、Multisample 、視頻及繪圖的整合工具( 某些是通過OpenML 的努力而開發出來的,它本身屬於OpenGL ARB 擴展指令之一。
OpenGL 2.0 在OpenGL 1.3 基礎上進行修改擴充、五個方面的重大改進:①複雜的核心被徹底精簡;②完全的硬件可編程能力;③改進的內存管理機制、支持高級像素處理;④擴展至數字媒體領域,使之跨越高端圖形和多媒體範疇;⑤支持嵌入式圖形應用。
爲了在獲得強大功能的同時保持理想的兼容性,OpenGL 2.0 經歷以下兩個發展階段:第一個階段注重兼容能力和平滑過渡,爲此,OpenGL 2.0 核心將在精簡後的OpenGL 1.3 功能模塊的基礎上加上可完全兼容的新功能共同組成,這種做法在滿足兼容性的同時,還可將原有OpenGL 中數量衆多、且相互糾纏不清的擴展指令進行徹底精簡。 第一階段的任務只是爲了過渡,而第二階段纔是OpenGL 2.0 的真正成熟期。此時,ARB 將合成出一個“純OpenGL 2.0” 內核,純內核將包含更多新增加的“精簡型API 函數”,這些函數具有完全的可編程特性、結構簡單高效、功能強大且應用靈活。除了完成這項任務外,ARB 組織還得指導開發商拋棄繁瑣的OpenGL 1.x 、轉用更具彈性的“純OpenGL 2.0” 。
+
可編程着色:允許編寫一小段代碼來代替OpenGL 原來的頂點操作/ 片段操作。這樣提供了巨大的靈活性,可以實現各種各樣的豐富的效果。
紋理大小不再必須是2 的整數次方。
點塊紋理:把紋理應用到一個點(大小可能不只一個像素)上,這樣比繪製一個矩形可能效率更高。
【 opengl 2.1 / glsl 1.2 】 2006.7
+
可編程着色:編程語言由原來的1.0 版本升級爲1.2 版本。
緩衝區對象:原來僅允許存放頂點數據,現允許存放像素數據( PBO : Pixel Buffer Object ) 。
【 opengl 3.0 / glsl 1.3 】 2008.7
OpenGL 3.0 仍然作爲一個開放性和跨平臺的3D 圖形接口標準,增加了新版的shader 語言:GLSL 1.30 ,可以充分發揮當前可編程圖形硬件的潛能。同時,OGL3.0 還引入了一些新的功能,例如頂點矩陣對象,幀緩存對象( FBO : Frame Buffer Object ) 功能,32bit 浮點紋理和渲染緩存,基於阻塞隊列的條件渲染,緊湊行半浮點頂點和像素數據,四個新壓縮機制等等。
【 opengl 3.1 / glsl 1.4 】 2009.3
OpenGL 3.1 將此前引入的OpenGL 着色語言“GLSL” 從1.30 版升級到了1.40 版,通過改進程序增強了對最新可編程圖形硬件的訪問,還有更高效的頂點處理、擴展的紋理功能、更彈性的緩衝管理等等。寬泛地講,OpenGL 3.1 在3.0 版的基礎上對整個API 模型體系進行了簡化,可大幅提高軟件開發效率。
OpenGL 3.1 主要新特性:紋理緩衝對象(Texture Buffer Object )、統一緩衝對象(UBO :Uniform Buffer Objects )、符號正常化紋理(Signed Normalized Textures )、基本元素重啓(Primitive Restart )、實例化(Instancing )、拷貝緩衝接口(CopyBuffer API )……
【 opengl 3.2 / glsl 1.5 】 2009.8
OpenGL 3.2 在性能增強、畫質提升、幾何處理加速、Direct3D 程序導入簡化等方面加入了大量新特性,並且和Khronos Group 組織的其它標準進行了深入整合,包括用於並行計算的OpenCL 、面向移動設備3D 圖形的OpenGL ES 、創建3D web 的WebGL 等等。
- 增強頂點陣列和同步對象的性能,避免在CPU 和GPU 之間或者多個CPU 線程之間共享資源時的等待空閒。
- 改進管線可編程性,包括OpenGL Core 核心裏的幾何着色器。
- 着色器可直接處理紋理採樣,提升立方體貼圖畫質和多重採樣渲染彈性。
OpenGL ARB( 架構評審委員會) 工作組同時定義了新版OpenGL 着色語言“GLSL 1.50” ,以及兩種新的Profile :Compatibility Profile( 兼容模式) 全面向下兼容舊版本的OpenGL 標準,支持現有應用程序;Core Profile( 核心模式) 則更加精煉,主要用於開發新的應用程序。
除此之外,Khronos Group 還定義了五種新的ARB 擴展,可以通過OpenGL 實現最新的GPU 圖形特性。該功能得到認可並被廣泛採納後,會整合在未來版本OpenGL 規範的核心模式之中。
【 opengl 3.3 / glsl 3.3 】 2010.3
在舊時代顯卡硬件上儘可能地加入了OpenGL 4.0 、GLSL 4.0 的功能,爲開發人員提供最大程度的彈性和平臺覆蓋性。
【 opengl 4.0 / glsl 4.0 】 2010.3
一次重大升級,專門面向AMD Radeon HD 5000 系列( 以及尚未發佈的NVIDIA GeForce GTX 400 系列) 提供了大量全新特性,使開發人員可以更好地使用這些新硬件,還進一步改善了與OpenCL 的協作性,用於計算密集型視覺應用的加速,另外繼續支持OpenGL 3.2 引入的核心與兼容性檔案,從而保證向下兼容性。
OpenGL 4.0 特別爲程序開發人員設計了大量全新特性,包括:
- 兩個新的着色階段 ,讓GPU 接手幾何細分曲面工作,不再勞煩CPU ;
- 每採樣片段着色器與可編程片段着色器輸入位置,提高渲染質量和反鋸齒彈性;
- 數據繪圖由OpenGL 或者OpenCL 之類的外部API 負責生成,無需CPU 參與;
- 着色子程序,顯著提升編程彈性;
- 經由新的對象類型採樣對象(sampler objects) 實現紋理狀態和紋理數據的分離;
- 64 位雙精度浮點着色器操作和輸入輸出,提升渲染精度和質量;
- 性能改進,包括實例化幾何着色器、實例化陣列和新的計時器序列。
【 opengl 4.1 / glsl 4.1 】 2010.7
OpenGL 4.1 核心規範主要新功能:
- 全面兼容OpenGL ES 2.0 API ,方便移動和桌面平臺之間的移植。
- 支持着色器程序對象二進制文件的查詢和載入,節省重編譯時間。
- 支持將程序與編程階段單獨綁定,提高編程彈性。
- 支持64 位浮點組件頂點着色單元輸入,提高几何精度。
- 支持渲染界面多重視角,提高渲染彈性。