OpenGL與Direct3D


 

 

OpenGL(wiki  chs)/ OpenGL ES(wiki  chs)是跨平台的,OpenGL廣泛用於PC平台(windows、Linux、Unix、Mac OS X),OpenGLES則用於移動端平台(Android、iOS),以C的方式提供API

WebGL(wiki  chs)是跨平台3D圖形Web標准,被各大web瀏覽器廠商廣泛支持,使用JavaScript語言提供API,不使用插件的情況下在兼容的web瀏覽器的Canvas上呈現交互式3D圖形

Direct3D(wiki  chs)是DirectX(wiki  chs)套裝的一部分,只能用於windows相關的平台,用C++實現,並以COM的方式提供API

OpenGL與Direct3D是多年的競爭關系,wiki上有一篇:Comparison of OpenGL and Direct3D

 

固定管線到可編程管線進化版本

3D API 最后只支持固定管線的版本 第一個支持可編程管線版本 第一個只支持可編程管線版本
OpenGL 1.5 2.0 3.1
OpenGL ES 1.1 2.0 2.0
WebGL 1.0 1.0
Direct3D 7.0 8.0 10.0

 

OpenGL、OpenGL ES和WebGL

OpenGL版本 Shader版本 OpenGL ES WebGL
OpenGL 1.1(1997.3.4)      
OpenGL 1.2(1998.3.16)      
OpenGL 1.3(2001.8.14)   OpenGL ES 1.0(2003.7.28)  
OpenGL 1.4(2002.7.24)      
OpenGL 1.5(2003.7.29)  

OpenGL ES 1.1(兼容1.0版本)

 
OpenGL 2.0(2004.9.7) GLSL 1.1 OpenGL ES 2.0(2007.3)  GLSL ES 1.0 WebGL 1.0為GLSL ES 1.0的子集
OpenGL 2.1(2006.7.2) GLSL 1.2    
OpenGL 3.0(2008.8.11) GLSL 1.3    
OpenGL 3.1(2009.3.24) GLSL 1.4    
OpenGL 3.2(2009.8.3) GLSL 1.5(Geometry Shaders)    
OpenGL 3.3(2010.3.11) GLSL 3.30    
OpenGL 4.0(2010.3.11) GLSL 4.00(Tessellation Shaders)    
OpenGL 4.1(2010.7.26) GLSL 4.10    
OpenGL 4.2(2011.8.8) GLSL 4.20    
OpenGL 4.3(2012.8.6) GLSL 4.30(Compute Shaders) OpenGL ES 3.0(2012.8,兼容2.0版本) GLSL ES 3.0 WebGL 2.0   GLSL ES 3.0
OpenGL 4.4(2013.7.22) GLSL 4.40    
    OpenGL ES 3.1(2014.3,向前兼容至2.0版本) GLSL ES 3.1  
OpenGL 4.5(2014.8.11) GLSL 4.50    
    OpenGL ES 3.2(2015.8,向前兼容至2.0版本)  GLSL ES 3.2  
OpenGL 4.6(2017.7.31) GLSL 4.60    

擴展閱讀:History of OpenGL

 

Direct3D

D3D版本 Shader版本 OS版本
Direct3D 7.0(1999.9.22)   Win98
Direct3D 8.0(2000.10.12) PS1.1、VS1.1 Win2000
Direct3D 8.1(2001.10.25) PS1.4、VS1.1 WinXP
Direct3D 9.0(2002.11.19) SM2.0 WinXP
Direct3D 9.0b(2003.8.13) PS2.0b、VS2.0 WinXP

Direct3D 9.0c

2004.10~2010.6(每2月更新一個版本)

DXSDK_Jun10.exe是其最后一個版本

SM3.0 WinXP

Direct3D 9.0L(Direct3D 9Ex)

在Vista上使用WDDM驅動來跑Direct3D 9.0c的程序

SM3.0 Vista Only
Direct3D 10.0(2006.11.30) SM4.0(Geometry Shaders) Vista

Direct3D 10.1(2008.2.4)

SM4.1 Vista SP1

Direct3D 11.0(2009.10.22)

                     (2011.2.16)

SM5.0(Tessellation Shaders、Compute Shaders)

Win7

Win7 SP1

Direct3D 11.1(2012.8.1) SM5.0 Win7 SP1、Win8
Direct3D 11.2(2013.10.18) SM5.0 Win8.1
Direct3D 12.0(2015.7.29) SM6.0 Win10

 

OpenGL與Direct3D對應關系

OpenGL版本 D3D版本 OS版本
OpenGL 2.1 Direct3D 9.0(SM2.0) WinXP

OpenGL 3.0~3.1

Direct3D 9.0c(SM3.0) WinXP

OpenGL 3.2~3.3

Direct3D 10.0(SM4.0)

Vista

OpenGL 4.0~4.6

Direct3D 11.0(SM5.0)

Win7

 

顯卡與驅動

顯卡支持Direct3D和OpenGL版本由驅動程序決定的,在硬件不支持的情況下,可以由驅動退回到軟件執行。GPU並不知道自己執行的是哪個API,以及是什么版本

例如:一些老顯卡可通過提供win10新驅動來支持D3D12;驅動可以返回自己支持的feature level,runtime根據這個來確定哪些功能有,那些沒有。

擴展閱讀:支持dx12的顯卡有哪些?目前完整支持DirectX12的顯卡列表詳解

 

PC平台顯卡

桌面顯卡性能天梯圖:http://www.mydrivers.com/zhuanti/tianti/gpu/index.html

秋刀魚半藏整理的天梯圖:https://pic1.zhimg.com/v2-2f1801c8ba1988962caa7ec865c55601_r.jpg

筆記本顯卡性能天梯圖:http://www.mydrivers.com/zhuanti/tianti/gpum/index.html

花飛羽落整理的天梯圖(含桌面和筆記本):https://tieba.baidu.com/p/5562043942

在PC上可是使用GPU-Z來查看顯卡的信息:

  

 

手機平台GPU:

手機gpu性能天梯圖:http://12601618.s21i.faiusr.com/4/ABUIABAEGAAgwauaxQUo4o6R_gQw-gg4qxI.png

手機gpu性能天梯圖:http://pan.baidu.com/s/1hqKuONq

注:天梯圖分為三個版本:α版、β版、γ版

       α版以GFXBench的霸王龍離屏分數為標准, Adreno320@400MHz為基准

       β版以GFXBench的曼哈頓3.0離屏分數為標准,Adreno320@400MHz為基准

       γ版以GFXBench的曼哈頓3.1離屏分數為標准,Adreno405@550MHz為基准

 

Direct3D庫、顯卡和驅動

在windows系統上,使用dxdiag來查看當前所能支持的Direct3D版本

 

OpenGL庫、顯卡和驅動

由於Direct3D是競爭關系,OpenGL在windows的集成的庫是1.1的版本

在windows系統上,可使用GPU_Caps_Viewer工具查看當前顯卡驅動所能支持的OpenGL版本

 

  

 

也可使用OpenGL Extensions Viewer查看當前顯卡驅動的OpenGL能力  注:該工具還有Mac OS X、Android和iOS版本

 

OpenGL ES庫、顯卡和驅動

OpenGL ES版本 Android版本 iOS版本 Android機GPU 蘋果機GPU
1.0 Android 1.0(API 1)+      
1.1 Android 1.6(API 4)+      
2.0 Android 2.2(API 8)+ iOS5+(iPad, iPad Mini, iPhone 3GS版本及以上)    
3.0 Android 4.3(API 18)+ iOS7+(iPhone 5S, iPad Air, iPad Mini2版本及以上)

高通:Adreno 300 and 400 series+

ARM:Mali T600 series+

Nvidia:Tegra4

Imagination:PowerVR 6 series+

包括:G6400, G6430, G6200, G6230, G6630

3.1 Android 5.0(API 21)+  

高通:Adreno 400 and 500 series

ARM:Mali T6xx (midgard)+

Nvidia:Tegra K1 and X1

Imagination:PowerVR 6, 6XE, 6XT, 7XE and 7XT

6XE包括:G6050, G6060, G6100, G6110
6XT包括:G6250, G6450, G6650
7XT包括:GT7200, GT7400, GT7600, GT7800, GT7900

3.2 Android 6.0(API 23)+  

高通:Adreno 420 series+

ARM:Mali T760 series+

 

 

幾乎所有的Android設備支持OpenGL ES 2.0,大部分的Android設備支持OpenGL ES 3.1。

Android支持情況占比:https://developer.android.google.cn/about/dashboards/#OpenGL

Android版本與API級別對應關系:https://source.android.com/source/build-numbers#platform-code-names-versions-api-levels-and-ndk-releases

OpenGL ES各版本API說明:https://www.khronos.org/opengles/

 

WebGL

桌面平台瀏覽器

Chrome:9+版本支持WebGL1.0;56+版本支持WebGL2.0

windows平台下會使用ANGLE(Almost Native Graphics Layer Engine)技術將OpenGL ES轉成擁有更好驅動支持的D3D 9.0c或D3D 11(2013.9加入)

可帶上–use-gl=desktop參數啟動Chrome來關閉ANGLE,強制讓其使用OpenGL ES來作為WebGL的渲染器

使用測試頁面WebGL Browser Report來看是否已經關閉ANGLE

FireFox:4.0+版本支持WebGL1.0;51+版本支持WebGL2.0

從2013年起,windows平台下也會使用ANGLE(Almost Native Graphics Layer Engine)技術將OpenGL ES轉成擁有更好驅動支持的D3D 9.0c或D3D 11

可在about:config頁面中將webgl.prefer-native-gl修改為true或webgl.disable-angle設置成false來關閉ANGLE,強制讓其使用OpenGL ES來作為WebGL的渲染器t

Safari:6.0+(Mac OS X Lion)、5.1+(Mac OS X Snow Leopard)支持WebGL1.0,8.0之前的版本缺省是關閉的

IE:11支持WebGL1.0,早期的IE版本可使用IEWebGL插件來支持WebGL

Edge:0.95+版本支持WebGL1.0

 

移動平台瀏覽器

Chrome(Android):25+版本支持WebGL1.0,30之前的版本缺省是關閉的

FireFox(Android):4+版本支持WebGL1.0

Safari(iOS):iOS8下Safari開始支持WebGL1.0

更詳細地瀏覽器支持情況:https://en.wikipedia.org/wiki/WebGL#Support

查詢當前瀏覽器WebGL1.0支持情況:http://webglreport.com/?v=1

查詢當前瀏覽器WebGL2.0支持情況:http://webglreport.com/?v=2

 

webGL示例效果

WebGL Dynamic Cube

Three js

 

參考

跨越OpenGL和D3D的鴻溝(一):開篇

跨越OpenGL和D3D的鴻溝(二):現代OpenGL

跨越opengl和d3d的鴻溝(三):交集?並集?

跨越opengl和d3d的鴻溝(四):完結篇,平台和未來

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM