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则用于移动端平台(androidios),以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
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支持情况占比: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的鸿沟(四):完结篇,平台和未来

 

 

以上是关于OpenGL与Direct3D的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL ES 2.x 与 OpenGL 兼容

opengl与dx

OpenGL与Directx的区别

OpenGL入门(四)-- OpenGL坐标系与坐标变换

OpenGL OpenGL管线 与 可编程管线流程

OpenGL学习笔记:拾取与选择