2011-11-08 66 views
9

可能重複:
OpenGL 4.1 vs 3.1+OpenGL 3.x和4.X之間的區別?

閱讀在網絡上的某些頁面,我發現OpneGL的兩個版本列出的相同代碼示例。我知道這兩個使用可編程功能流水線,不像早期版本,但兩者之間的主要區別是什麼?爲什麼你會用另一個呢?

回答

36

OpenGL主要版本號有效地表示硬件級別,如D3D主要版本號。 GL 2.x代表DX9硬件。 GL 3.x代表DX10級硬件。因此GL 4.x代表DX11級別的硬件。

然而,並非GL 4.x中引入的所有功能都是特定於硬件的。有些是API便利和清理功能。這些可作爲更低級別硬件的擴展,而NVIDIA和AMD的驅動程序也提供它們。其中最大的是program separation,這是GLSL在時間所需要的。

根據GL 4.x提供的實際硬件特性,3.x中沒有這個特性,它不是巨大的或改變遊戲規則。這當然是重要的,但不是推土機。您可以在OpenGL Wiki上按版本查找GL功能的詳細分類。

Image load/storeatomic counters可能是最大的那個(這也包括shader storage buffers),儘管同時是最少廣告。着色器可以直接從圖像和緩衝區寫入/讀取,雖然有a lot of caveats and synchronization issues to understand這樣做。

GL 4.3增加了compute shaders,與上述結合使您可以在沒有OpenCL/OpenGL interop的痛苦的情況下執行計算任務。

最受關注的功能是tessellation。這引入了一對額外的着色器階段:一個決定多少細分一個基元,另一個決定如何從細化的基元生成新值。

Subroutines是一個有趣但常常被忽略的功能。基本上,您可以將子例程附加到着色器程序,如校服。所以你可以使用相同的基本程序來運行照明功能,但是你可以在不改變程序的情況下交換照明功能。基本程序將獲取紋理,確定漫反射/鏡面反射/等等材質參數,確定正常和光照參數,並將其傳遞給子程序。你可以有各種各樣的照明子程序,從快速簡單的Lambertian漫射到完全在Cook-Torrance(儘管你需要更多的材料參數)。

+2

這個答案值得比+ 5 ^^多得多。即使導航功能非常強大,您關於OpenGL的書也非常棒。 – Korchkidu

+0

@Korchkidu:什麼書? – ssc

+0

除了內部變化之外,我能否真的看到差異?例如,當我仔細觀察遊戲或3D演示時,這些更改是否會導致某種效果更好? – ssc

相關問題