閱讀在網絡上的某些頁面,我發現OpneGL的兩個版本列出的相同代碼示例。我知道這兩個使用可編程功能流水線,不像早期版本,但兩者之間的主要區別是什麼?爲什麼你會用另一個呢?
回答
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/store和atomic 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(儘管你需要更多的材料參數)。
- 1. iPhone SDK 3.x和4.x之間的區別
- 2. const int&x = 4和const int x = 4之間的區別
- 3. int * x []和int(* x)[]之間的區別?
- 4. null == x和x == null之間的區別?
- 5. IsNull(x)和x =「」之間有區別嗎?
- 6. TOP X和Row_Number之間的區別()
- 7. x:Key和x之間的區別:名稱
- 8. X.509和pem之間的區別
- 9. UNHEX和X之間的區別(MySQL)
- 10. OpenGL ES 2.0和OpenGL 4之間的區別4
- 11. $('x> y'),$('y','x')和$('x y')之間有什麼區別?
- 12. ASP.NET MVC 3和4之間的區別?
- 13. 當我<x和範圍(x)中的i之間的區別?
- 14. 「導入X」和「從X導入*」之間的區別?
- 15. 傳遞(int x)和(const int x)之間的區別
- 16. int(x)和mediumint(x)之間的區別 - MySQL
- 17. x和get(「x」)之間的奇異區別?
- 18. Rails 1.X和2.X之間的主要區別是什麼
- 19. Emacs客戶端:C-x k和C-x之間的區別#
- 20. android 1.x和2.x之間的主要區別
- 21. Python中F(x)和F x之間的區別
- 22. C中「* x = 1」和「x = 1」之間的區別是什麼?
- 23. * x = i和x =&i之間的區別是什麼
- 24. Angular 1.X和2.X之間的區別是什麼
- 25. .at(vect.size())= x之間的區別;和vect.push_back(x);
- 26. x |之間的區別y和y <(x)在bash中?
- 27. char * x和char * x [80]之間的區別?
- 28. Tibco businessworks 5.x和6.x之間的區別
- 29. (重複)'public int x'之間的區別和'public int x {get;組; }
- 30. Spark 1.x和2.x中各種sparkcontext之間的區別
這個答案值得比+ 5 ^^多得多。即使導航功能非常強大,您關於OpenGL的書也非常棒。 – Korchkidu
@Korchkidu:什麼書? – ssc
除了內部變化之外,我能否真的看到差異?例如,當我仔細觀察遊戲或3D演示時,這些更改是否會導致某種效果更好? – ssc