zoukankan      html  css  js  c++  java
  • 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

    手机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 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的鸿沟(四):完结篇,平台和未来

  • 相关阅读:
    Python全栈开发之21、django
    Python全栈开发之17、tornado和web基础知识
    Python全栈开发之18、cookies、session和ajax等相关知识
    jquery之别踩白块游戏的实现
    Python全栈开发之16、jquery
    Python全栈开发之15、DOM
    Python全栈开发之13、CSS
    Python全栈开发之12、html
    Go语言学习之路-2-变量与常量
    Go语言学习之路-1-Go语言环境搭建
  • 原文地址:https://www.cnblogs.com/kekec/p/12417055.html
Copyright © 2011-2022 走看看