DirectX

DirectX（Direct eXtension，縮寫：DX）是由微软公司建立的一系列專為多媒體以及遊戲開發的應用程式介面。旗下包含Direct3D、Direct2D、DirectCompute等等多個不同用途的子部份，因為這一系列API皆以Direct字樣開頭，所以DirectX（只要把X字母替換為任何一個特定API的名字）就成為這一巨大的API系列的統稱。目前最新版本為DirectX 12，隨附於Windows 10作業系統之上。 DirectX被广泛用于Microsoft Windows、Microsoft Xbox电子游戏开发，并且只能支持这些平台。除了遊戲開發之外，DirectX亦被用於開發許多虛擬三維圖形相關軟體。Direct3D是DirectX中最廣為應用的子模塊，所以有時候這兩個名詞可以互相代稱。 DirectX主要基於C++编程语言，並遵循COM架構。 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 plugin）用於音频信号处理以及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。 2002年，微软发布了DirectX 9，它支持最新的顶点阴影着色器2.0版本，又于2004年4月将shader model 3.0（SM 3.0）加入了DirectX 9.0c。 2005年4月，DirectShow从DirectX移除，加入到Microsoft Platform SDK。 2010年6月7日發佈的DirectX SDK是最後獨立發佈的SDK版本，之後的DirectX SDK被整合進新版的Microsoft Windows SDK裡。例如DirectX 11.2 SDK被放在Windows Software Development Kit (SDK) for Windows 8.1裡。 硬件制造商要为每款硬件产品编写驱动程序来支持DX，甚至一些硬件商只编写DX的驱动，这意味着要使用这款硬件就必须安装DX，早期的DirectX版本自带了所有支持DX硬件的驱动程序，后来用户可以通过自动更新系统下载适合的驱动。 DX10之前的所有DirectX版本都保持向下相容性，即新版本相容舊版本，例如安装了DX9的電腦，依然可以執行由DX6编寫的程式碼。安装了DX11/12的電腦，依然可以執行由DX9C编寫的程式碼，不過小部分依然需要安裝DX9C。 2002年间，微软发布一个兼容.NET Framework的DX版本，因而允许程序员充分利用.NET的特性编写DX程序，这套API被称为Managed DirectX（英语：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的下载服务。 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 10的改良，只對效能和擴展性進行最佳化，主要改進在提供Shader Model 5.0，加入對MSAA的直接采樣控制。大幅改進多執行緒效能，提供三個獨立的介面。進一步提高紋理壓縮，鑲嵌（tessellation）處理的效能，並加入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將更好支援多核心、多執行緒的最佳化，降低GPU處理瓶頸，並強化跨平台功能，可有效支援微軟各式平台，並提升硬體功耗表現。隨Windows 10 出貨並支持Xbox One。 2019年3月13日，微軟於DirectX Developer Blog表示，未來魔獸世界8.1.5的遊戲更新將使Windows 7 平台用戶也能體驗 DirectX 12的多線程渲染優勢，並提高遊戲效能。且未來陸續也會有其他廠商推出相關更新，将更多的 D3D12 游戏移植到 Windows 7。 纵观DX的各个版本，X都是一个核辐射警告标志或一只螺旋桨叶片。这个设计引发了不小的争议，因为DX计划的原名叫做“曼哈顿计划”，这个名称来源于美国的核武器研制计划，最终美国使用核武器轰炸了日本的广岛和长崎，这在暗示DX产品要替代日本在电子游戏方面的霸主地位。这一说法被微软公开否定，微軟表示这只是出于艺术设计的考虑。 微软主题 图形设备接口（GDI） GGI（通用图形接口） Graphics pipeline DxDiag DirectX plugin ActiveX Microsoft XNA 支持DirectX 10游戏列表 支援DirectX 11遊戲列表 Metal Mantle SDL OpenMAX OpenML OpenGL OpenAL 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）.  Microsoft's MSDN文檔&資源中心（页面存档备份，存于互联网档案馆） DirectSetup Documentation（页面存档备份，存于互联网档案馆） GameDev'關於DX的資料 OpenGL 3 & DirectX 11: The War Is Over : Introduction - Tom's Hardware 中關村在線 - 見證3D進化之路－DirectX發展歷史回顧（页面存档备份，存于互联网档案馆） DirectX知識庫 / 程式設計俱樂部（页面存档备份，存于互联网档案馆）