DirectX,(DirecteXtension,简称DX)是由微软公司创建的多媒体编程接口。由C++编程语言实现,遵循COM。被广泛使用于MicrosoftWindows、MicrosoftXBOX、MicrosoftXBOX360和MicrosoftXBOXONE电子游戏开发,并且只能支持这些平台。最新版本为DirectX12,创建
DirectX,(Direct eXtension,简称DX)是由微软公司创建的多媒体编程接口。由 C++ 编程语言实现,遵循COM。被广泛使用于 Microsoft Windows、Microsoft XBOX、Microsoft XBOX 360 和 Microsoft XBOX ONE 电子游戏开发,并且只能支持这些平台。最新版本为 DirectX 12,创建在最新的 Windows10。
功能介绍
Microsoft DirectX 是这样一组技术:它们旨在使基于 Windows 的计算机成为运行和显示具有丰富多媒体元素(例如全色图形、视频、3D 动画和丰富音频)的应用程序的理想平台。DirectX 包括安全和性能更新程序,以及许多涵盖所有技术的新功能。应用程序可以通过使用 DirectX API 来访问这些新功能。
功用
DirectX 加强3D图形和声音效果,并提供设计人员一个共同的硬件驱动标准,让游戏开发者不必为每一品牌的硬件来写不同的驱动程序,也降低了用户安装及设置硬件的复杂度。
从字面意义上说,Direct 就是直接的意思,而后边的X则代表了很多的意思,从这一点上可以看出 DirectX 的出现就是为了为众多软件提供直接服务的。
举例来说,以前在 DOS 下骨灰级玩家玩游戏时,并不是安装上就可以玩了,他们往往首先要设置声卡的品牌和型号,然后还要设置IRQ(中断)、I/O(输入与输出)、DMA(存取模式),如果哪项设置的不对,那么游戏声音就发不出来。这部分的设置不仅让玩家伤透脑筋,对游戏开发者来说就更为头痛。为了让游戏能够在众多电脑中正确运行,开发者必须在游戏制作之初,把市面上所有声卡硬件数据都收集过来,然后根据不同的 API(应用编程接口)来写不同的驱动程序。这对于游戏制作公司来说,是很难完成的,所以在当时多媒体游戏很少。微软正是看到了这个问题,为众厂家推出了一个共同的应用程序接口—— DirectX。只要游戏是依照 Directx 来开发的,不管显卡、声卡型号如何,统统都能玩,而且还能发挥最佳的效果。当然,前提是使用的显卡、声卡的驱动程序必须支持 DirectX 才行。
组成
DirectX是由很多API组成的,按照性质分类,可以分为四大部分,显示部分、声音部分、输入部分和网络部分。
显示部分
显示部分担任图形处理的关键,分为 DirectDraw(DDraw)和 Direct3D(D3D),前者主要负责2D图像加速。它包括很多方面:我们播放mpg、DVD电影、看图、玩小游戏等等都是用的 DDraw,你可以把它理解成所有划线的部分都是用的 DDraw。后者则主要负责 3D 效果的显示,比如 CS 中的场景和人物、FIFA 中的人物等等,都是使用了 DirectX 的Direct3D。
声音部分
声音部分中最主要的 API 是 DirectSound,除了播放声音和处理混音之外,还加强了3d音效,并提供了录音功能。我们前面所举的声卡兼容的例子,就是利用了DirectSound来解决的。
输入部分
输入部分 DirectInput 可以支持很多的游戏输入设备,它能够让这些设备充分发挥最佳状态和全部功能。除了键盘和鼠标之外还可以连接手柄、摇杆、模拟器等。
网络部分
网络部分 DirectPlay 主要就是为了具有网络功能游戏而开发的,提供了多种连接方式,TCP/IP,IPX,Modem,串口等等,让玩家可以用各种连网方式来进行对战,此外也提供网络对话功能及保密措施。
主要改进
- 高级着色器(HLS)模型性能改进,能让开发人员只用GPU而无需动用CPU来做更多事:双精度着色器功能。
- D2D应用程序的高性能抗锯齿路径:目标独立光栅化。
- 在移动平台和低配置设备上,基于Tile渲染器的D3D11.1应用程序性能更高:没有覆写和丢弃。
- DX11.1硬件上所有着色器阶段均可开启着色器调试:每个阶段都有UAV。
- D3D11程序无需为大量样本分配内存即可使用高质量渲染算法:无序访问查看与多重采样抗锯齿样本访问。
- 延迟着色技术改进:逻辑操作。
- 针对游戏开发人员的高效缓冲管理:改进一致性缓冲的控制。
新特性
同以往每个版本的DirectX更新一样,本次DirectX 11.1的更新主要围绕两个方面展开,分别是Debug(意为除错)和Extended(扩展,包括功能和编译方式的拓展)。本次更新的主要项目如下:
・Shader tracing(shader追踪)
・Direct3D device sharing(D3D设备共享)
・Check support of new Direct3D 11.1 features and formats(全新D3D特性支持)
・Create larger constant buffers than a shader can access(允许创建大于shader可访问尺寸的常buffer)
・Use logical operations in a render target(对渲染目标执行逻辑操作)
・Force the sample count to create a rasterizer state(为每一个光栅化过程强制样本数)
・Process video resources with shaders(通过shader处理视频过程)
・Change subresources with new copy options(通过新的copy选项改进资源体系)
・Discard resources and resource views(放弃传统的资源管理和资源视图模式)
・Support a larger number of UAVs(支持大量的UAV[UnorderedAccessViews]操作)
・Bind a subrange of a constant buffer to a shader(为shader绑定作为子区间的常buffer)
・Retrieve the subrange of a constant buffer that is bound to a shader(检索每一个绑定常buffer作为子区间的shader的常buffer子区间)
・Clear all or part of a resource view(清除所有关于资源视图的内容)
・Map SRVs of dynamic buffers with NO_OVERWRITE(以非overwrite方式为SRVs动态buffer创建地图)
・Use UAVs at every pipeline stage(在每条渲染管线上使用UAV)
本次DirectX 11.1更新最大的亮点来自Core Structures部分,包括D3D11 Feature data double的DoublePrecisionFloatShaderOps和D3D11 Feature data arthitecture的TileBasedDeferredRenderer,也就是我们通常所说的DP Shader Ops以及TBDR。
DP Shader Ops
作为DirectX 11.1在桌面部分最引人注目的更新,DP Shader Ops的引入足以引发一场革命,因为它为DP Shader的实用打开了最后一道API端的大门。
DP shader(Double Precision Float Shader,双精度浮点shader)是微软在DirectX 11中首次引入的shader类型。与传统的常规shader相比,DP shader的最大特点在于在shader处理数据及运算过程中全面引入双精度规则,这让DP shader具备了远高于常规shader的运算精度,配合FMA的应用,DP shader可以称得上桌面应用范围内完全无损的shader类型。
遗憾的是,DirectX 11中所包含的DP shader部分仅仅是在编程及数据定义规则上进行了扩展,并为引入更多的指令及执行模式。由此可见,要想让DP shader真正走向实用,DP shader Ops的引入是必不可少的。在传统的光栅化过程中,全部的浮点shader数据均为单精度,就我们应用场合来看,FP32格式的shader数据已经足以保证程序运行精度的需求,DP数据在精度上是多余的。既然单精度FP32精度已经够用,引入DP shader的目的何在呢?答案来自一个显赫的名字光线追踪。光线追踪对图形进步的意义毋庸多言,其精美的效果以及重大意义几乎每天都在被无数人无数次的重复着。按照微软对未来桌面图形处理过程的规划,光线追踪的引入已经迫在眉睫。
在光线追踪处理过程中,处理光线交汇的运算部分必须仰仗双精度浮点数据来维持运算过程及结果的正确性。如果使用惯用的处理精度,光线在与物体交互作用2次以上之后将会发生不可忽略的数据溢出,如果按照常规处理过程要求的那样让一束光线与物体交互作用最少6~8次,甚至30~50次的话,最终结果必定已经面目全非。由此可见,要保证光线追踪能够实用化并与现阶段的shader体系有机的结合在一起,DP shader的引入是必不可少的。而DirectX 11.1中的DP Shader Ops,正是这一切能够得以实现的基础。
TBDR
DirectX 11.1的另一个更新TileBasedDeferredRenderer几乎与桌面图形体系完全无关。
Tile-Based Deferred Render是Power VR独特的TBR技术的一种延伸实现手段。TBR/TBDR通过将每一帧画面划分成多个矩形区域,并对区域内的所有像素分别进行Z值检查,在任务进入渲染阶段之前就将被遮挡的不可见像素剔除掉。由于在渲染之前进行Z-culling操作,TBR/TBDR极大地削减了最终被渲染像素的数量,不仅大幅降低了系统对像素的处理压力,更极大的节约了显存带宽及空间的开销。广泛采用TBR/TBDR技术的GPU,主要包括Imagination为移动领域提供的SGX Series5系列。
通过DirectX 11.1的TileBasedDeferredRenderer重新对TBDR技术进行了支持,图形函数库接口的打开让希望使用TBDR技术的程序员获得了在DirectX环境下即可完成编译程序的机会,这对于平衡性能与功耗之间的关系,进而让程序员在DirectX框架下完成移动设备程序的构造有着重要的意义。
官方主页
如果你的电脑在运行游戏或一些 3D 软件时出现缺少 d3dx9_xx.dll 等等,都可以安装 DirectX 来解决问题。