DirectX
DirectX(Direct eXtension,缩写:DX)是由微软公司创建的一系列专为多媒体以及游戏开发的应用程序接口。旗下包含Direct3D、Direct2D、DirectCompute等等多个不同用途的子部分,因为这一系列API皆以Direct字样开头,所以DirectX(只要把X字母替换为任何一个特定API的名字)就成为这一巨大的API系列的统称。目前最新版本为DirectX 12,随附于Windows 10操作系统之上。
当前版本 |
|
---|---|
内置于 | Windows 95 OSR2 Windows NT 4.0 及之后所有版本 |
许可协议 |
DirectX被广泛用于Microsoft Windows、Microsoft Xbox电子游戏开发,并且只能支持这些平台。除了游戏开发之外,DirectX亦被用于开发许多虚拟三维图形相关软件。Direct3D是DirectX中最广为应用的子模块,所以有时候这两个名词可以互相代称。
组件
DirectX组成的组件有:
- Direct3D:主要用于绘制3D图形。
- Direct2D:主要提供2D动画的硬件加速,为DirectDraw的替代者。
- DirectWrite:主要字体显示API,提供使用GPU令字体显示更为平滑,类似ClearType(只支持于Windows Vista/7/8/8.1以上)。
- DirectInput:用于结合键盘、鼠标、摇杆,或其它的游戏控制器。
- XInput:主要用于Xbox360的控制器。
- XAudio2:主要用于低延迟游戏音频播放。
- DirectCompute:GPU通用计算API。
- DirectXMath:针对游戏优化的高速数学运算API,特别支持单精度浮点运算及矩阵运算,使用SSE2指令集。
- DirectSetup:用于DirectX组件的安装,以及检查DirectX的版本。
- DirectX Media:包含DirectAnimation可用于2D的网页动画,DirectShow可支持多媒体录音以及资料流媒体,DirectX在网页上的转换,还有Direct3D可保留3D图像更清晰的解析。DirectShow亦包含有DirectX插件用于音频信号处理以及DirectX视频加速加速影音播放。
- DirectX媒体对象化:支持资料流对象,像是编码、解码和效果。
废弃组件
这些组件曾经也是DirectX的一员,但现在微软只提供最低程度的维护,也不再建议使用。
- DirectDraw:用于绘制2D图形(不建议使用,虽然目前仍有大量的用户),现开始被Direct2D取代。
- DirectInput:用于结合键盘、鼠标、摇杆,或其它的游戏控制器,自8.0之后就不再更新。
- DirectPlay:用于网络游戏连线沟通,配合DirectInput使用,自8.0后就不再更新。
- DirectSound:用于录音,记录波形音效已被XAudio2取代。
- DirectMusic:用于DirectMusic Producer的录音。
历史
1994年末,微软即将推出新一代操作系统Windows 95。决定新操作系统的最终价值的因素在于究竟新系统能运行哪些程序。微软的三个员工:Craig Eisler、Alex St. John、Eric Engstrom十分关心这个问题,因为不少游戏程序员更喜欢在DOS系统下编写游戏,这意味着,没有多少人愿意为WIN95编写游戏,新操作系统不会获得多少成功。
DOS允许直接访问显卡、键盘、鼠标、声卡以及其他系统硬件设施。而Windows 95出于保护存储系统的目的,限制了对硬件的直接访问,取而代之的是一套更加规范标准的访问方法。微软需要一种方法让程序员在WIN95中也能编写出高效的程序。此时,离新系统发布不到几个月了。St. John和Engstrom联合解决了这个问题,他们将解决方案称为DirectX。
DirectX的第一个版本作为Windows Games SDK发布于1995年9月,它作为Windows API的一部分用以替换Windows 3.1中的DCI和WinGAPI。ATI的一个开发团队为微软带来了基本的游戏图像技术,微软方面,DirectX由专门的团队负责开发,Eisler为团队领导,而St. John和Engstrom则成为主程序设计师。
DirectX出现之前,微软已经将OpenGL包括在Windows NT系统中,而在当时,OpenGL对硬件要求严苛,这限制了一些工程师和CAD用户。Direct3D就作为OpenGL的代替品被加入DirectX。随着硬件技术的发展,OpenGL成为行业标准,一场“战役”发生在DirectX的支持者和OpenGL的支持者之间,而且前者只支持Windows平台,而后者支持多平台。在实际应用中,游戏开发者常常两者同时使用,因为DirectX支持许多OpenGL所不支持的功能,比如音效和输入设备。而选择混合使用OpenGL和OpenAL的队伍也在壮大。
由此派生出的“特别DirectX”也作为微软Xbox和Xbox 360的图形API,这套API由微软和NVIDIA公司共同开发,Xbox API和DirectX 8.1比较相似,但跟其他主机科技一样不能更新,Xbox版本也叫做DirectXbox,但由于商业销售缘故,还是被简称为Xbox。[1]
2002年,微软发布了DirectX 9,它支持最新的顶点阴影着色器2.0版本,又于2004年4月将shader model 3.0(SM 3.0)加入了DirectX 9.0c。
2005年4月,DirectShow从DirectX移除,加入到Microsoft Platform SDK。[2]
2010年6月7日发布的DirectX SDK是最后独立发布的SDK版本,之后的DirectX SDK被集成进新版的Microsoft Windows SDK里。例如DirectX 11.2 SDK被放在Windows Software Development Kit (SDK) for Windows 8.1里。
发布历史
DirectX版本 | 版本编号[3] | 操作系统 | 日期 | 备注 |
---|---|---|---|---|
DirectX 1.0 | 4.02.0095 | 1995年9月30日 | ||
DirectX 2.0 | 未知 | 1996年 | ||
DirectX 2.0a | 4.03.00.1096 | Windows 95和NT 4.0 | 1996年6月5日 | |
DirectX 3.0 | 4.04.00.0068 | 1996年9月15日 | ||
4.04.00.0069 | 之后的DirectX 3.0加入了Direct3D 4.04.00.0069 | 1996年 | ||
DirectX 3.0a | 4.04.00.0070 | Windows NT 4.0 SP3 |
1996年12月 | 最后支持Windows NT 4.0的版本 |
DirectX 3.0b | 4.04.00.0070 | 1996年12月 | 3.0a的一个小更新 纠正了一个日文版本下的漏洞 | |
DirectX 4.0 | 从未发布[4] | |||
DirectX 5.0 | 4.05.00.0155 (RC55) | Windows NT 5.0的测试版本 | 1997年7月16日 | |
DirectX 5.2 | 4.05.01.1600 (RC00) | 为Windows 95发布的版本 | 1998年5月5日 | |
4.05.01.1998 (RC0) | 只用于Windows 98 | 1998年6月25日 | ||
DirectX 6.0 | 4.06.00.0318 (RC3) | Windows CE上的Dreamcast版本 | 1998年8月7日 | |
DirectX 6.1 | 4.06.02.0436 (RC0) | 1999年2月3日 | ||
DirectX 6.1a | 4.06.03.0518 (RC0) | 只用于Windows 98 SE | 1999年5月5日 | |
DirectX 7.0 | 4.07.00.0700 (RC1) | 1999年9月22日 | ||
4.07.00.0700 | Windows 2000 | 2000年2月17日 | ||
DirectX 7.0a | 4.07.00.0716 (RC0) | 2000年3月8日 | ||
4.07.00.0716 (RC1) | 2000年 | |||
DirectX 7.1 | 4.07.01.3000 (RC1) | 只用于Windows Me | 2000年8月14日 | 2D与3D组件分离的最后一版(IDirectDraw7与IDirect3D7) |
DirectX 8.0 | 4.08.00.0400 (RC10) | 2000年11月12日 | 2D与3D组件集成的第一个版本(IDirectGraphic8)与Vertex Shader与Pixel Shader | |
DirectX 8.0a | 4.08.00.0400 (RC14) | 最后支持Windows 95的版本 | 2001年2月5日 | |
DirectX 8.1 | 4.08.01.0810 | Windows XP,Windows Server 2003和Xbox特别版 | 2001年10月25日 | |
4.08.01.0881 (RC7) | 这个版本用于更早的操作系统 (Windows 98, Windows Me和Windows 2000) |
2001年11月8日 | ||
DirectX 8.1a | 4.08.01.0901(RC?) | 2002年 | 这个版本升级了Direct3D(D3d8.dll) | |
DirectX 8.1b | 4.08.01.0901 (RC7) | 2002年6月25日 | 这个版本修正了DirectShow在Windows 2000上的一个漏洞(Quartz.dll) | |
DirectX 8.2 | 4.08.02.0134 (RC0) | 和DirectX 8.1b一样,但包含了DirectPlay 8.2 | 2002年 | |
DirectX 9.0 | 4.09.00.0900 (RC4) | 2002年12月19日 | (IDirectGraphic9)与HLSL | |
DirectX 9.0a | 4.09.00.0901 (RC6) | 2003年3月26日 | ||
DirectX 9.0b | 4.09.00.0902 (RC2) | 2003年8月13日 | ||
DirectX 9.0c | 4.09.00.0903 | 只用于Windows XP SP2 | ||
4.09.00.0904 (RC0) | 2004年8月4日 | |||
4.09.00.0904 | Windows XP SP2,Windows Server 2003 SP1,Windows Server 2003 R2和Xbox 360 | 2004年8月6日 | ||
DirectX 9.0c - 双月更新 | 4.09.00.0904 (RC0) | 2006年10月更新是最后支持Windows 98、Windows Me和Windows 2000的版本。[5]2005年12月更新和2006年2月更新增加了对XML的支持 | 两月更新一次,开始于2004年10月,直到现在,最新版本:DirectX 9.0c Redist Jun 2010(2010年6月) | |
DirectX 10.0 | 6.00.6000.16386 | Windows Vista | 2006年11月30日 | 开始导入DXGI(DirectX Graphics Infrastructure)架构 |
DirectX 10.1 | 6.00.6001.18000 | Windows Vista Service Pack 1与Windows Server 2008 | 2008年2月4日 | |
DirectX 11 | 6.01.7600.16385 | Windows 7,Windows Server 2008 R2 | 2009年7月22日 | 与Windows 7 RTM一同发布 |
6.01.7601.17514 | Windows 7 SP1,Windows Server 2008 R2 SP1 | 2010年11月23日 | KB976932,与Windows 7 SP1一同发布 | |
6.00.6002.18107 | Windows Vista SP2,Windows Server 2008 SP2 | 2009年10月26日 | KB971512 | |
DirectX 11.1 | 6.02.9200.16384 | Windows 8 | 2012年10月26日 | 与Windows 8一同发布,Windows 7 SP1升级后部分支持 |
DirectX 11.2 | 6.03.9600.16384 | Windows 8.1、Windows RT 8.1、Windows Server 2012 R2 | 2013年10月18日 | 包含于操作系统,无独立程序包 |
DirectX 12 | 10.00.10240.16384 | Windows 10 | 2015年1月18日 | 包含于操作系统,无独立程序包,并支持Xbox One |
DirectX 12 Ultimate | 10.00.19041.0928 | Windows 10 build 19042 | 2020年11月10日 | 加入DirectX Raytracing Tier 1.1 光线追踪,VRS(可变速率着色),Mesh Shader,Sampler Feedback(取样器反馈) |
兼容性
硬件制造商要为每款硬件产品编写驱动程序来支持DX,甚至一些硬件商只编写DX的驱动,这意味着要使用这款硬件就必须安装DX,早期的DirectX版本自带了所有支持DX硬件的驱动程序,后来用户可以通过自动更新系统下载适合的驱动。
DX10之前的所有DirectX版本都保持向下兼容性,即新版本兼容旧版本,例如安装了DX9的电脑,依然可以执行由DX6编写的代码。安装了DX11/12的电脑,依然可以执行由DX9C编写的代码,不过小部分依然需要安装DX9C。
各种版本
.NET Framework
2002年间,微软发布一个兼容.NET Framework的DX版本,因而允许程序员充分利用.NET的特性编写DX程序,这套API被称为Managed DirectX(MDX)。2005年微软在DirectX 9.0c版本上开发一套正对.NET平台的Managed API,即Direct 9.0 for Managed Code 1.0(简称Managed DirectX)。
2005年12月、2006年2月、4月、8月,微软相继发布DirectX的更新版本,使之支持.NET 2.0框架。然而.NET 2.0版本至今只是个测试版。
GDC 2006期间,微软终止开发Managed DirectX,改推出了XNA framework,是一组基于Managed DirectX,帮助程序员更轻松的编写游戏的框架,将DirectX,Shader,高级着色器语言(HLSL)以及其他工具集成到一起。2006年12月11日,微软对Windows XP提供免费的XNA Game Studio Express RTM的下载服务。
DirectX 10
Windows Vista及以上的操作系统才支持DirectX 10(也就是说,DirectX 9是最后一个支持Windows XP的版本),比起之前的版本,DX10做了重大的变动:增加了XInput用以处理XBOX 360手柄的支持,DirectSound将被XACT替换。DirectX 10也减少了对音效硬件加速的支持,更多的使用CPU来运算音效。
Direct3D 10.1是DirectX 10的改进版,随Vista SP1出货。
DirectX 11
DirectX 11是DirectX 10的改良,只对性能和扩展性进行优化,主要改进在提供Shader Model 5.0,加入对MSAA的直接采样控制。大幅改进多线程性能,提供三个独立的接口。进一步提高纹理压缩,镶嵌(tessellation)处理的性能[6][7],并加入Compute Shader(DirectCompute)来支持GPGPU,提供新版HLSL语言。
DirectX 11.1是DirectX 11的改进版,随Windows 8出货。Windows 7 SP1升级后部分支持。
DirectX 11.2是DirectX 11.1的改进版,随Windows 8.1出货。
DirectX 12
DirectX 12将更好支持多核心、多线程的优化,降低GPU处理瓶颈,并强化跨平台功能,可有效支持微软各式平台,并提升硬件功耗表现。随Windows 10 出货并支持Xbox One。
2019年3月13日,微软于DirectX Developer Blog表示,未来魔兽世界8.1.5的游戏更新将使Windows 7 平台用户也能体验 DirectX 12的多线程渲染优势,并提高游戏性能。且未来陆续也会有其他厂商推出相关更新,将更多的 D3D12 游戏移植到 Windows 7。[8]
DirectX标志的变更
纵观DX的各个版本,X都是一个核辐射警告标志或一只螺旋桨叶片。这个设计引发了不小的争议,因为DX计划的原名叫做“曼哈顿计划”,这个名称来源于美国的核武器研制计划,最终美国使用核武器轰炸了日本的广岛和长崎,这在暗示DX产品要替代日本在电子游戏方面的霸主地位。这一说法被微软公开否定,微软表示这只是出于艺术设计的考虑。[9]
参见
其他API
参考资料
- ^ J. Allard, PC Pro采访 (页面存档备份,存于互联网档案馆), 2004 4月
- ^ 存档副本. [2007-06-26]. (原始内容存档于2007-01-25).
- ^ 版本编号由微软的DxDiag工具获得(4.09.0000.0900以及更高版本,在开始菜单|运行中输入DxDiag即可),编号统一使用x.xx.xxxx.xxxx格式,而微软网站上给出的编号使用x.xx.xx.xxxx格式,如果网站上编号为4.09.00.0904,那么在电脑上安装后,会变为4.09.0000.0904。
- ^ DirectX 4从未发布过,Raymond Chen在他的书《The Old New Thing》中解释说,DirectX 3发布之后,微软开始同时开发DX4和5,只是增加一些小特性的DX4版本会在短时间内完成,而DX5会增加大量新内容,游戏开发者对DX4新特性的失望导致了DX4计划的搁置。之后,微软将重心完全转移到DX5开发上。 Chen, Raymond. Etymology and History. The Old New Thing 第一版. Pearson Education. 2006年: pg. 330. ISBN 978-0-321-44030-3.
- ^ DirectX End-User Runtimes (October 2006). [2008-07-24]. (原始内容存档于2019-09-24).
- ^ What's next for DirectX? A DirectX 11 overview—A DirectX 11 overview. Elite Bastards. 2008-09-01 [2008-09-04]. (原始内容存档于2008-09-04).
- ^ DirectX 11: A look at what's coming. bit-tech.net. 2008-09-17 [2011-01-27]. (原始内容存档于2011-06-15).
- ^ World of Warcraft uses DirectX 12 running on Windows 7. Microsoft DirectX Developer Blog. 2019-03-13 [2019-03-13]. (原始内容存档于2019-03-12) (美国英语).
- ^ David Craddock. Alex St John Interview. Shack News. 2007年3月 [2007-04-04]. (原始内容存档于2007-04-07).