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 |
|
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示例效果
參考