OpenGL与Direct3D
Posted kekec
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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) | WebGL 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版本) | WebGL 2.0 |
OpenGL 4.4(2013.7.22) | GLSL 4.40 | ||
OpenGL ES 3.1(2014.3,向前兼容至2.0版本) | |||
OpenGL 4.5(2014.8.11) | GLSL 4.50 | ||
OpenGL ES 3.2(2015.8,向前兼容至2.0版本) | |||
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
手机平台GPU:
手机gpu性能天梯图:http://12601618.s21i.faiusr.com/4/ABUIABAEGAAgwauaxQUo4o6R_gQw-gg4qxI.png
Direct3D库、显卡和驱动
在windows系统上,使用dxdiag来查看当前所能支持的Direct3D版本
OpenGL库、显卡和驱动
由于Direct3D是竞争关系,OpenGL在windows的集成的库是1.1的版本
在windows系统上,可使用GPU_Caps_Viewer工具查看当前所能支持的OpenGL版本
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支持情况占比: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示例效果
参考
以上是关于OpenGL与Direct3D的主要内容,如果未能解决你的问题,请参考以下文章