简介
DirectX是一种基于COM的系统,主要由硬件抽象层HAL和硬件模拟层HEL所构成。DirectX被分成若干个组件模块,涵盖了多媒体应用的方方面面。且这些组件的数目、名称和功能,也是随着其版本的演化而所增减、改变和加强。
DirectX 软件开发工具包 (SDK) 由可再次分发的二进制形式运行时库以及用于编码的文档和随附标头组成。最初,运行时仅由游戏安装或由用户显式安装。虽然运行时是专有的闭源软件,但该 SDK 可免费下载,且大多数 SDK 示例都提供了源代码。自Windows 8发布以来,DirectX SDK已集成到Windows SDK中。
发展历程

1994年末,微软准备发布操作系统Windows 95,消费者考虑的一个重要因素是能够在Windows 95上运行的程序。微软员工亚Alex St. John曾与各种游戏开发人员进行讨论,询问他们将MS-DOS游戏带到Windows 95的可能性有多大,但发现大多数回答都是是消极的。程序员们发现,与使用BIOS例程或直接硬件访问的MS-DOS环境相比,Windows环境缺乏这个必要的功能,还存在兼容性的问题,如基于WinG编程接口的迪士尼的《狮子王动画故事书》(Animated Storybook: The Lion King)。由于许多未经测试与该游戏捆绑在一起的WinG接口不兼容的新康柏电脑的图形驱动程序,导致该游戏在许多台式电脑系统上频繁崩溃,以至于家长们不断打电话给迪士尼的客服求助。
St. John认识到在Windows下进行游戏开发存在限制,并招募了另外两名工程师Craig Eisler和Eric Engstrom,以开发更好的解决方案,让更多的程序员为Windows开发游戏。该项目代号为“曼哈顿计划”,就像第二次世界大战的同名项目一样,与同名的第二次世界大战项目类似,其想法是用运行Microsoft操作系统的个人电脑取代日本开发的视频游戏机。最初,该项目使用了辐射符号作为其标志,但微软要求团队更换标志。管理层并不认同该项目,因为他们认为Windows不适合作为一个游戏平台,但这三人坚决致力于该项目的开发。正是由于他们的反叛精神,导致微软办公产品高级副总裁Brad Silverberg将这个三人组命名为“Beastie Boys(野兽男孩)”。
这三个人从1994年末开始,在其他分配的项目之间进行了大部分的工作。在几家硬件制造商的投入下,经过四个月的努力,该团队开发了第一套应用程序编程接口(API),并在1995年游戏开发者大会上进行了展示。该软件开发工具包(SDK)包括实现了位图图形的DirectDraw库,音频的DirectSound以及玩家之间网络通信的DirectPlay库。此外,还首次记录了Windows 95中已有的扩展游戏手柄API,称为DirectInput,并提供了有关如何在插入光盘后立即启动安装过程的描述,这一功能被称为AutoPlay, 也是SDK的一部分。这个库的"Direct"部分的命名意味着这些例程绕过了现有的Windows 95核心例程,只通过硬件抽象层(HAL)直接访问计算机硬件。尽管团队最初将其命名为"Game SDK"(软件开发工具包),但"DirectX"这个名字来自一位嘲笑各种库的命名方案的记者。团队决定继续使用那个命名方案,并将该项目称为DirectX。

1995 年 9 月,DirectX 的第一个版本作为 Windows Games SDK 发布。其中,DirectDraw组件是Windows 3.1的DCI和WinG API的Win32替代品。DirectX允许所有版本的Microsoft Windows(从Windows 95开始)集成高性能多媒体功能。Eisler在他的博客中写到了创建DirectX 1到5的疯狂过程。

为了吸引更多开发者支持DirectX,微软联系了id Software的John Carmack,提出无偿将Doom(《毁灭战士》)和Doom 2(《毁灭战士2》)从MS-DOS移植到DirectX,并且id保留游戏的所有发行权。Carmack同意了这个提议,微软的Gabe Newell负责主导这个移植项目。1996年8月,首款游戏以Doom 95的形式发布,这也是首款采用DirectX的发行游戏。微软通过广告大力宣传这款游戏,甚至有比尔·盖茨出现在游戏标题的广告中。

随着Windows 95 OSR2和Windows NT 4.0的推出,DirectX 2.0成为了Windows本身的一个组件。由于Windows 95本身还很新,且没有多少游戏针对其发布,微软大力推广DirectX,以期获得开发者的支持。1996年,DirectX的推广负责人Alex St. John在计算机游戏开发者大会上举办了一场精心策划的活动,游戏开发者Jay Barnson形容这场活动是罗马主题,包括真正的狮子、托加斯长袍和类似室内嘉年华的活动。在这个活动上,微软首次介绍了Direct3D,并演示了通过互联网进行多人游戏的MechWarrior 2。

在DirectX之前,微软在其Windows NT平台中添加了OpenGL。OpenGL被设计为一个跨平台、与窗口系统无关的软件接口,由Silicon Graphics公司开发,旨在将3D图形编程引入应用程序编程的主流。此外,它还可用于2D图形和图像处理,并由包括微软在内的架构审查委员会(ARB)进行管理。Direct3D旨在成为微软控制的OpenGL替代方案,最初专注于游戏使用。随着3D游戏的增长,游戏开发人员发现OpenGL可以有效用于游戏开发。此时,支持跨平台OpenGL和仅限Windows的Direct3D之间的"战斗"开始了。有趣的是,OpenGL在微软得到了DirectX团队的支持。如果开发人员选择在计算机游戏中使用OpenGL 3D图形API,Direct3D之外的DirectX其他API通常与OpenGL结合使用,因为OpenGL不包含DirectX的所有功能(例如声音或操纵杆支持)。
在专门针对游戏机的版本中,DirectX被用作微软的Xbox、Xbox 360和Xbox One游戏机API的基础。该API是由微软和Nvidia共同开发的,Nvidia开发了原始Xbox所使用的定制图形硬件。Xbox API类似于DirectX 8.1版本,但像其他游戏机技术一样,它不可更新。Xbox的开发代号是DirectXbox,但商业上它被简化为Xbox。

2002年,微软发布了支持比以前更长的着色器程序的DirectX 9,其中包括像素和顶点着色器版本2.0。自那以后,微软继续更新DirectX套件,在2004年8月发布的DirectX 9.0c中引入了Shader Model 3.0。
截至2005年4月,DirectShow已从DirectX中删除,并移至Microsoft Platform SDK。

2006年,DirectX 10发布,它可在 Microsoft 的新操作系统Windows Vista上使用。组件 DirectInput 和 DirectSound 将在 DirectX 10 中弃用。Xinput和XACT(为Xbox开发)将取代DirectInput和DirectSound。
2012年,DirectX已被确认存在于Microsoft的Windows Phone 8中。
2018 年3月,宣布推出 DirectX 光线追踪 (DXR),能够在支持的硬件上进行实时光线追踪。同年,DirectX Shader 编译器还添加了对将 HLSL 编译为 SPIR-V 的支持。

2019年,微软宣布将把 DirectX 12引入 Windows7,但只是作为某些游戏的插件。第一款在Windows 7中获得DirectX 12支持的游戏是魔兽世界,支持8.1.5补丁。

2020年3月,Microsoft发布了 DirectX 12 Ultimate,它将统一到Windows 10计算机和Xbox Series X以及其他第九代Xbox控制台上的公共库中。其新功能包括DirectX Raytracing 1.1,可变速率着色,它使程序员可以根据设计选择,网格着色器和采样器反馈来控制着色的细节级别。
历史版本与功能
DirectX必须支持多媒体设备的最新技术和功能,而多媒体硬件(尤其是显卡的3D性能)和技术始终处在高速发展过程中,所以DirectX的技术和版本也同样在不断发展和演变,其中发展最快的是3D接口部分。下表为DirectX版本的发布时间、引入的新模块和特性:
DirectX 版本版本 | 发布时间 | 说明 | 模块与特性 |
主版本 | 次版本 | 版本号 |
1 | 1.0 | 4.02.0095 | 1995.09.30 | 最初作为Windows Game SDK发布,取代Windows 95以后的WinG | DirectDraw、DirectSound、DirectInput、DirectPlay、DirectSetup |
2 | 2.0 | | 1996 | 只运送了几个第三方应用程序 | 引入Direct3D |
2.0a | 4.03.00.1096 | 1996.06.05 | Windows 95 OSR2 和 Windows NT 4.0 独占 |
3 | 3.0 | 4.04.00.0068 | 1996.09.15 | | 支持MMX,为DirectSound补充DirectSound3D API |
4.04.00.0069 | 1996 | DirectX 3.0 的更高软件包包括 Direct3D 4.04.00.0069 |
3.0a | 4.04.00.0070 | 1996.12 | Windows NT 4.0 SP3(及更高版本) 支持Windows NT 4.0的最新版本 |
3.0b | 4.04.00.0070 | 1996.12 | 对3.0a的一个非常小的更新,修复了日语版Windows 95的外观问题 |
4 | 4.0 | 未发布 | DirectX 4从未发布过。Microsoft的Raymond Chen在他的书《The Old New Thing》中解释说,在DirectX 3发布后,Microsoft开始同时开发版本4和版本5。版本 4 将是一个具有小功能的短期版本,而版本 5 将是一个更实质性的版本。游戏开发人员对 DirectX 4 所述的功能缺乏兴趣,导致它被搁置,并且已经区分两个新版本的大量文档导致Microsoft选择不重复使用版本 4 来描述用于版本 5 的功能 | |
5 | 5.0 | 4.05.00.0155 (RC55) | 1997.08.04 | 作为Windows 2000的测试版提供,将安装在Windows NT 4.0上 | 有许多改进,如受力反馈控制器、多显示器支持、新的游戏控制面板、用户界面的全面改进等 |
4.05.00.0155 (RC66) | | Windows 95 OSR 2.5 安装介质中包含的安装程序 |
5.2 | 4.05.01.1600 (RC00) | 1998.05.05 | 适用于 Windows 95 的 DirectX 5.2 版本 |
4.05.01.1998 (RC0) | 1998.06.25 | 专为Windows 98 开发 |
6 | 6.0 | 4.06.00.0318 (RC3) | 1998.08.07 | 在 Dreamcast 和其他设备上实现的 Windows CE | 添加新的3D特性(如添加DXUT框架)、支持AMD公司的3Dnow,技术、性能较5.0有提高。在1999年2月3日推出的6.1版中,添加了DirectMusic模块 |
6.1 | 4.06.02.0436 (RC0) | 1999.02.03 | Windows 98 第二版独家。这是在 486 或更早的 CPU 上运行的最后一个版本 |
6.1a | 4.06.03.0518 (RC0) | 1999.05.05 | |
7 | 7.0 | 4.07.00.0700 (RC1) | 1999.09.22 | | 改进3D图形和声音,性能更快,为Direct3D API引入硬件传送、光照和纹理压缩及硬件加速,引入D3DX工具库。使用Creative公司的EAX技术改进3D声音的算法 |
4.07.00.0700 | 2000.02.17 | 专为Windows 2000开发 |
7.0a | | 1999.12.17 | 仅适用于 Windows 95 至 98 |
4.07.00.0716 (RC0) | 2000.03.08 | |
4.07.00.0716 (RC1) | 2000 | |
7.1 | 4.07.01.3000 (RC1) | 2000.09.14 | Windows Me独家。具有内置RGB软件渲染支持的最新版本 |
8 | 8.0 | 4.08.00.0400 (RC10) | 2000.11.10 | | 将DirectDraw与Direct3D完全集成在一起,其中Direct3D的性能有了本质上的飞跃(引入顶点/像素shader(着色引擎/光照模型)、支持硬件点精灵和三维体纹理),将DirectMusic与DirectSound更紧密地集成在一起构成DirectX Audio,更新了DirectInput与DirectPlay,添加了DirectShow,抛弃了其余的DirectX Media模块。2001年11月11日推出的8.1版,被集成在Windows XP中销售,该版本添加了从DirectShow分离出的DMO(DirectX Media Objects媒体对象)组件模块。它还支持许多新的图形特性,如像素着色引擎的1.2~1.4版、动态/高分辨率纹理、新3D扩展方法等 |
8.0a | 4.08.00.0400 (RC14) | 2001.01.24 | 最新版本支持 Windows 95,最新版本在 dxdiag 中具有软件渲染支持.exe |
8.1 | 4.08.01.0810 | 2001.10.25 | 专为Windows XP、Windows XP SP1、Windows Server 2003 和 Xbox 开发 |
4.08.01.0881 (RC7) | 2001.11.08 | 此版本适用于下层操作系统(Windows 98,Windows Me和Windows 2000) |
8.1a | 4.08.01.0901 (RC?)? | 2002 | 此版本包括对 Direct3D (D3d8.dll) 的更新 |
8.1b | 4.08.01.0901 (RC7) | 2002.06.25 | 此更新包括对 Windows 2000 (Quartz.dll) 上的 DirectShow 的修复 |
8.2 | 4.08.02.0134 (RC0) | 2002 | 与 DirectX 8.1b 相同,但包含 DirectPlay 8.2 |
9 | 9.0 | 4.09.00.0900 (RC4) | 2002.12.19 | | 添加许多新特性到DirectX Graphics和DirectShow中,例如将DirectDraw的功能并入到Direct3D中,支持顶点和像素着色引擎的新版本2.0和3.0,引入裁剪测试、位移贴图和多元纹理,支持128位浮点着色精度和根据显示器自动调整γ值等。也添加若干新特性到DirectInput、DirectPlay、DirectSound和DirectMusic中 |
9.0a | 4.09.00.0901 (RC6) | 2003.03.26 | |
9.0b | 4.09.00.0902 (RC2) | 2003.08.13 | |
9.0c | 4.09.00.0904 (RC0) | 2004.07.22 | 从 2004 年 10 月开始,定期混合 32 位/64 位更新每两个月发布一次,直到 2007 年 8 月,此后每季度发布一次。最近一次更新发布于 2010 年 6 月 |
| 2006.12.08 | 支持Windows 98,98 SE和Me 的最新版本 |
4.09.00.0904 | 2004.08.06/2008.04.21* | Xbox 360、Windows XP SP2 和 SP3*、Windows Server 2003 SP1 和 Windows Server 2003 R2 |
| 2010.02.05 | 支持 Windows 2000、XP 和 XP SP1 的最新版本 |
| 2010.06.07 | 最终的 9.0c 版本和最后一个支持 Windows XP SP2 和 SP3 的版本 |
10 | 10 | 6.00.6000.16386 | 2006.11.30 | 专为Windows Vista开发 | 全新的显示驱动模式,全新的API, Shader Model 4.0,支持困难 |
10.1 | 6.00.6001.18000 | 2008.02.04 | Windows Vista SP1, Windows Server 2008 包括 Direct3D 10.1 | 改善了shader资源存取功能,在读取多样本时有更好的控制能力,可以创建定制的下行采样滤波器,更新的浮点混合功能,阴影滤波功能也有所提高,支持多核系统有更高的性能,引入更新的驱动模型,WDDM 2.1 |
6.00.6002.18005 | 2009.04.28 | Windows Vista SP2, Windows Server 2008 SP2 包括 Direct3D 10.1 |
11 | 11 | 6.01.7600.16385 | 2009.10.22 | Windows 7, Windows Server 2008 R2 | 支持细分和多线程,提高物理效果、游戏AI及游戏其他功能特性以提高游戏的互动性,提高纹理生成性能 |
6.00.6002.18107 | 2009.10.27 | Windows Vista SP2 和 Windows Server 2008 SP2,通过 Windows Vista 和 Windows Server 2008 的平台更新 |
6.01.7601.17514 | 2011.02.16 | Windows 7 SP1, Windows Server 2008 R2 SP1 |
11.1 | 6.02.9200.16384 | 2012.08.01 | Windows 7 SP1 (部分), Windows 8, Windows RT, Windows Server 2012 | 支持 WDDM 1.2 以提高性能,改进了 Direct2D、Direct3D 和 DirectCompute 的集成,并包括来自 XNA 框架的 DirectXMath、XAudio2 和 XInput 库,支持3D游戏和视频 |
11.2 | 6.03.9600.16384 | 2013.10.18 | Windows 8.1, Windows RT, Windows Server 2012 R2, Xbox One | 向 Direct2D 添加了一些新功能(如几何实现),添加了交换链合成,允许以较低的分辨率渲染场景的某些元素,然后通过硬件叠加与以更高分辨率渲染的其他部分进行合成 |
12 | 12 | 10.00.10240.16384 | 2015.07.29 | Windows 10, Xbox One | 提供多适配器支持,允许开发人员同时在系统上使用多个 GPU |
10.00.15063.0000 | 2017.03.20 | 添加了 Windows 10、深度边界测试和可编程 MSAA |
10.00.17763.0000 | 2019.11.20 | Direct3D 12 仅适用于 Windows 7 SP1,通过面向应用开发人员的专用源代码包 |
10.00.17763.0001 | 2018.10.02 | 添加了Windows 10、DirectX 光线跟踪支持 |
10.00.18362.0116 | 2019.05.19 | 添加了Windows 10 可变速率着色 (VRS) 支持 |
10.00.19041.0928 | 2020.11.10 | Windows 10, Xbox Series X, Ultimate |
10.00.22000.1000 | 2021.10.05 | Windows 11,为 Windows 子系统(适用于 Linux 的 Windows 子系统)添加了本机刷新率切换 和改进的图形功能 |
12 Ultimate | | 2020.03.19 | Windows 10,Xbox Series X | 光线跟踪、可变速率着色(VRS)、网格着色器和采样器反馈 |
结构
DirectX是一种基于COM(Component Object Model,组件对象模型)的系统,它既不属于驱动程序层,也不属于应用层。DirectX的主要设计目标是在提供某种设备独立性的同时获取高速度,为此微软公司为DirectX设计了如下图所示的体系结构:

但是从8.0版起,DirectX就不再提供硬件模拟层HEL模块了,需要开发商、第三方或用户自己来编写一个PSD(Pluggable Software Device可插式软件设备)连到DirectX提供的HEL接口上,称之为参考设备。
组成
DirectX由多个(COM组件)模块组成,组件对象模型(Component Object Model,COM)是一种令DirectX不受编程语言束缚,并且使之向后兼容的技术。
随着版本的演化,这些模块在不断增减、合并和改变。例如,从DirectX 8.0版起,DirectX Media被弃用;从DirectX 9.0版起,DirectDraw已被集成到了Direct3D之中;从DirectX 9.0c版起,DirectInput已被XInput(Xbox)和键盘与鼠标的窗口消息处理(Windows)代替;从DirectX 10版起,DirectPlay已被Games for Windows - Live和Xbox Live代替。
如DirectX 10组件的模块构成如下图所示:(括号中的数字为该模块被首次引进或移出的版本号)

DirectX Graphics
DirectX Graphics(DirectX图形)提供了一组可用于创建游戏和其他高性能多媒体应用程序的 API,包括显示2D文本和图形的DirectWrite和Direct2D和显示3D图形的Direct3D等。
DirectWrite
DirectWrite是一种二维文本呈现技术,为应用程序提供了高质量的文本显示和完整的Unicode文本支持。它支持与分辨率无关的大纲字体、多格式文本、OpenType字体的高级版式功能,并能够提供硬件加速文本渲染。此外,DirectWrite还支持所有受支持语言的文本布局和呈现,以及GDI兼容的布局和呈现。对于开发人员而言,DirectWrite提供了低级的字形呈现API,使其能够执行自定义布局和Unicode到字形处理。
Direct2D
Direct2D 是一种硬件加速的即时模式二维图形 API,可为 2D 几何图形、位图和文本提供高性能和高质量的渲染,旨在与使用 GDI、GDI+ 或 Direct3D 的现有代码进行互操作。
DirectDraw(9.0后已集成至Direct3D)
DirectDraw(直接绘制)即二维图形绘制(高速位图传送/视频与2D动画),允许开发者定义二维图像,指定纹理和管理双缓冲区。
Direct3D
Direct3D(直接三维)即三维图形绘制。分为保留和立即两种模式,保留模式是一种高层API,建立在立即模式之上,使用起来方便容易,但是效率不高,适合于初学者。立即模式则是一种底层API,使用复杂,但是其效率比保留模式高得多。大多数DirectX应用程序,特别是计算机游戏,都是采用立即模式进行开发的。自从6.0版以来,保留模式API的发展停滞不前,而立即模式API的发展却日新月异。不论是保留模式还是立即模式,Direct3D都是建立在DirectDraw之上的。从9.0版起,Direct3D包含了DirectDraw,它像OpenGL一样同时具有二、三维图形绘制功能。
D3DX
D3DX(Direct3D eXtension,Direct3D扩展)即Direct3D服务的实用工具库,执行公共的数学计算和一些复杂的任务,包含若干简化3D模型使用的类,如粒子系统(particle system)。D3DX是以动态链接库(DLL)的形式提供的。
DXUT
DXUT(DirectX UTility library,DirectX;DirectX实用工具库,编程框架)即建立在Direct3D API之上的样例框架,也叫通用文件框架,可帮助程序员减少在烦琐的平凡工作(如创建窗口、创建设备、处理Windows消息和设备事件等)上所花的时间。
DXGI
DXGI(DirectX Graphics Infrastructure,DirectX图形基础设施)用于处理与图形相关的底层任务(如缓冲区格式选择和资源共享等),可独立于DirectX图形运行环境运作。它为多个DirectX版本(如Direct3D 10、Direct3D 11和Direct3D 12)提供了一个通用框架。
HLSL
HLSL(High Level Shading Language,高级着色语言)用于为Direct3D管线创建类似C的可编程着色器,如可使用HLSL 编写顶点着色器或像素着色器,还可以使用 HLSL 编写计算着色器,实现物理模拟等。从DirectX 8.0起引入。
DDS
DDS(DirectDraw Surface,DirectDraw表面)是从DirectX 7.0开始引入的一种文件格式(.dds),用于存储压缩(DXTn)和非压缩纹理。DDS支持MIP(Multum In Parvo,小步前进,拉丁短语)映射、立方映射和体映射。DDS文件格式还被D3DX和DirectX纹理编辑器(Dxtex.exe)及纹理转换工具(Texconv.exe)等其他DirectX工具支持。从Direct3D 10开始,DDS文件支持纹理数组。
DirectXMesh
DirectXMesh是一个共享源库,用于执行各种几何内容处理操作,包括生成法线和切线帧、三角形邻接计算、顶点缓存优化和网格生成。
DirectXTex
DirectXTex是一个共享源库,用于读取和写入 .DDS 文件,并执行各种纹理内容处理操作,包括调整大小、格式转换、mip 贴图生成、Direct3D 运行时纹理资源的块压缩以及高度贴图到法线贴图的转换。此库使用 Windows 映像组件 (WIC) API。它还包括 .TGA .HDR 读取器和编写器,因为这些图像文件格式通常用于纹理内容处理管道,但内置 WIC 编解码器当前不支持。
DXCore
DXCore 是一个适用于图形和计算设备的适配器枚举 API,其某些功能与 DXGI 的功能重叠,由Direct3D 12使用。
DirectXMath
DirectXMath API 是一个为 DirectX 应用程序提供常见线性代数和图形数学运算的 SIMD 友好的 C++ 类型和函数库。该库针对 Windows 32 位 (x86)、Windows 64 位 (x64) 以及通过 Visual C++ 编译器中的 SSE、AVX 和 ARM-NEON 内部函数支持的 ARM/ARM64 上的 Windows 提供了优化版本。
DirectML
DirectML(直接机器学习)是一个低级别的机器学习API。它采用了原生C++和nano-COM编程接口,并采用了类似于DirectX 12的工作流风格。用户可将机器学习推理工作负载集成到游戏、引擎、中间件、后端或其他应用程序中。DirectML是在Windows 10版本1903以及相应的Windows SDK版本中引入的,且得到了所有与DirectX 12兼容的硬件的支持。
DirectX Audio

DirectX Audio(DirectX音频)提供了一个完整系统来处理动态音轨,包括硬件加速、可下载声音、DirectX媒体对象以及高级3D定位效果。
DirectSound(已弃用)
DirectSound(直接声音)主要针对波形音频,底层接口。可用于开发播放和捕捉波形音频的高性能立体与三维(DirectSound 3D)音频应用程序。在DirectX中,DirectSound的功能将由XACT(Microsoft Cross-Platform Audio Creation Tool,Microsoft跨平台音频生成工具)来代替。
DirectMusic(已弃用)
DirectMusic(直接音乐)主要针对MIDI音乐,高层接口。为基于波形、MIDI声音或DirectMusic生成器所创造的动态内容的音乐和非音乐声道提供一个完整的解决方案。
XACT(已弃用)
XACT(Microsoft Cross-Platform Audio Creation Tool,Microsoft跨平台音频生成工具)是一种多人合作的音频设计工具和相关API,用于游戏的动态音频开发。其随DirectX 9.0c的2008年3月升级版,推出了XACT3的RTM版。
XAudio2
XAudio2是针对Windows和Xbox 360的一种跨平台的音频API。它为游戏提供信号处理和混频基础,用于替代Windows上传统的DirectSound和Xbox 360上以前的XAudio。XAudio2的RTM(Release To Manufacturing /Marketing,发行给制造业/销售)版随DirectX 9.0c的2008年3月升级版推出。
X3DAudio
X3DAudio是用于在XAudio2和XACT的协助下进行三维空间中声音定位的一种API,用于创建三维空间中相对于摄像机位置,声音来自某一点的错觉。
XAPO
XAPO(Cross-platform Audio Processing Objects,跨平台音频处理对象)允许在Windows和Xbox 360上用XAudio2和XACT创建跨平台音频处理对象的API。XAPO是一种对象,它接受输入的音频数据,并在传递之前对该数据执行某些操作。XAPO可用于完成多种任务,包括添加混响到音频流和监控峰值音量水平。
XAPOFX
XAPOFX(XAPO effect library,XAPO效果库)是用于XAudio2实现XAPO接口的一个音效集合。XAPOFX包含几种效果和一个创建效果实例的通用机制。
XWMA(已弃用)
XWMA是WMA(Windows Media Audio,Windows媒体音频)专业压缩格式的一个子集。XAudio2和XACT3都支持XWMA的软件解码。XWMA对WMA位流格式进行了一种轻量级包装,提供比XMA更大的压缩率。XWMA对使用小CPU达到可获取大压缩比时的对话和音乐非常有用。质量设置允许用户改变被压缩声音的比特率。XWMA随DirectX 9.0c的2008年3月升级版推出。
XAudio 2.7 和 XAudio 的 Xbox One 版本支持 xWMA 压缩,但 Windows 8.x 中的 XAudio 2.8 不支持 xWMA 压缩。Windows 10中的XAudio 2.9和XAudio2Redist支持xWMA内容。此工具现仅在旧版 DirectX SDK 和 Xbox One 开发工具包中提供。
DirectInput(9.0c后已被弃用)
DirectInput(直接输入)提供对各种输入设备的支持,包括对受力反馈(force-feedback)技术的全面支持,可用于处理所有游戏的输入。从DirectX 9.0c的2005年10月升级版开始,DirectInput已被XInput(Xbox)和键盘与鼠标的窗口消息处理(Windows)代替。
XInput Game Controller
XInput Game Controller API 使应用程序能够接收来自适用于 Windows 的 Xbox 控制器的输入。
DirectPlay(10.0后已被弃用)
DirectPlay(直接玩)是一组简化跨网络通信的工具,提供对多人网络游戏的支持,开发人员也使用它来测试他们的应用程序。在DirectX 9.0c版本中,Microsoft公司反对使用DirectPlay,而建议改用Windows Sockets和Windows Firewall API来代替。从DirectX 10开始,DirectPlay已被Games for Windows - Live和Xbox Live代替。
DirectSetup
DirectSetup(直接安装)提供了一个简单的API,用于自动安装DirectX驱动程序。由于DirectX是一个复杂的产品,此组件极大地简化了安装过程。从Vista开始,Windows操作系统包含DirectX模块,不再需要另外安装。
DirectShow(已被置于Windows SDK中)
DirectShow(直接展示)提供多媒体(音视频)流的高质量捕捉和重放。在8.0版之前,DirectShow是DirectX Media的一个组成模块。到8.0版时,因为DirectX SDK抛弃了DirectX Media,所以才将DirectShow集成到了DirectX之中。在DirectX 9.0c的2005年4月升级版中,DirectShow又被移出DirectX,放入Microsoft公司的Windows平台SDK之中。
DirectX Media Objects
DirectX Media Objects(DirectX媒体对象,DMO)是基于COM的多媒体和数据流组件,支持音视频的编解码器和特效。是在DirectX的8.1版时,从DirectShow分出的,其功能类似于DirectShow的过滤器,但DMO 的API 比 DirectShow 的相应 API 简单得多。
DirectX Media(8.0后已弃用)
DirectX Media(DirectX媒体)是一个用于流媒体应用的外部API集合。在DirectX 6.0之前,DirectX Media SDK和DirectX SDK是两个分离的SDK。在6.0版时DirectX Media SDK被集成到DirectX SDK之中。DirectX Media的运行模块,被集成到Windows和IE之中。到了8.0版时,DirectX Media又被DirectX SDK弃用(其核心模块DirectShow被集成到了DirectX之中),其功能被随Windows 2000 Server推出的Windows Media SDK所代替。
DirectX Transform
DirectX Transform(DirectX变换)用于产生二、三维图形的各种效果,如α混色和表面弯曲等。
DirectAnimation
DirectAnimation(直接动画)集成了多种媒体类型来创建复杂动画,可用做网页内容。
DirectX Video Acceleration
DirectX Video Acceleration(DirectX视频加速DXVA)是利用硬件加速二维视频的解码操作。它使软件解码器能够将某些 CPU 密集型操作卸载到图形卡进行处理。对于最终用户来说,这使得高比特率视频成为可能,例如在配备 DirectX VA 兼容显卡的旧计算机上播放全屏 DVD。
Direct3D Retained Mode

Direct3D Retained Mode(Direct3D保留模式)即Direct3D的保留模式,是一种高层API,建立在Direct3D立即模式之上,使用起来方便容易,但是效率不高。
DirectShow
DirectShow(直接展示)支持音视频流的高质量采集和重放。
DirectStorage
DirectStorage 是一项功能,旨在使游戏能够充分利用高速存储 (如 NVMe SSD) ,使其能够在极短的时间内读取小型数据块(比如64KB),并且最小化对CPU的负担。
兼容性
不同版本的 Windows 操作系统都包含并支持各种版本的 DirectX。这使得较新版本的操作系统能够继续运行早期版本的 DirectX 设计的应用程序,直到这些版本逐步被淘汰,以支持更新的 API、驱动程序和硬件。
在 DirectX 10 之前,DirectX 运行时被设计为与旧驱动程序向后兼容。这意味着较新版本的 API 旨在与针对之前版本的 DDI(显示驱动程序接口)编写的旧驱动程序进行互操作。应用程序程序员必须使用复杂的“上限位”系统查询可用的硬件功能,每个“上限位”都与特定的硬件功能相关联。例如,Direct3D 7 及更早版本适用于任何版本的 DDI,Direct3D 8 要求最低 DDI 级别为 6,Direct3D 9 要求最低 DDI 级别为 7。
2002 年,Microsoft发布了与 Microsoft .NET Framework 兼容的 DirectX 版本,使程序员能够从 .NET 应用程序中利用 DirectX 功能,使用兼容语言如托管 C++ 或 C# 编程语言。这个 API 被称为“Managed DirectX”(简称 MDX),声称能以底层本机 DirectX API 性能的 98% 运行。在 2005 年 12 月、2006 年 2 月、2006 年 4 月和 2006 年 8 月,Microsoft 连续发布了对该库的更新,最终形成了一个名为 Managed DirectX 2.0 的测试版。虽然托管 DirectX 2.0 将以前分散在多个程序集上的功能合并到单个程序集中,从而简化了软件开发人员对其的依赖关系,但此版本的开发随后已停止,并且不再受支持。托管 DirectX 2.0 库于 2006 年 10 月 5 日过期。
在 2006 年的 GDC(Game Developers Conference)期间,Microsoft 展示了 XNA Framework,这是 DirectX 的一个新的托管版本(类似于 Managed DirectX 但不完全相同),旨在通过将 DirectX、HLSL 和其他工具更容易地集成到一个框架中来帮助游戏开发。它还支持在 Xbox 360 上执行托管代码。XNA Game Studio Express RTM 于 2006 年 12 月 11 日作为 Windows XP 的免费下载提供。与 DirectX 运行时不同,Managed DirectX、XNA Framework 或 Xbox 360 API(如 XInput、XACT 等)并不作为 Windows 的一部分提供。开发人员需要重新分发运行时组件以及他们的游戏或应用程序。
需要注意的是,没有任何 Microsoft 产品(包括最新的 XNA 版本)为 .NET Framework 提供 DirectX 10 支持。
在托管语言中,另一种使用 DirectX 的方法是使用第三方库,例如:
SlimDX:一个开源库,用于在 .NET Framework 上进行 DirectX 编程
SharpDX:一个开源项目,提供完整的 DirectX API,允许在所有 Windows 平台上开发高性能游戏、2D 和 3D 图形渲染以及实时声音应用程序
DirectShow.NET 用于 DirectShow 的子集
Windows API CodePack for .NET Framework:来自Microsoft的开源库
替代方案
DirectX系列API有其替代品,OpenGL,其继任者Vulkan,Metal和Mantle具有与Direct3D相当的大多数功能。其他API的如SDL,Allegro,OpenMAX,OpenML,OpenAL,OpenCL,fmod,SFML等。其中许多库是跨平台的或具有开放的代码库。还有一些旨在提供相同 API 的替代实现,例如 Wine 中的实现。此外,ReactOS的开发人员正试图以“ReactX”的名义重新实现DirectX。