DirectX（，縮寫：）是由微軟公司建立的一系列專為多媒體以及遊戲開發的應用程式介面。旗下包含 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 Vista7881 以上）。 DirectInput：用於結合鍵盤、滑鼠、搖桿，或其它的遊戲控制器。 DXGI：為特定圖形 API 與圖形核心之間提供了一個對映，從而也能與使用者模式的 Windows Display Driver Model 驅動程式互動。 XInput：主要用於 Xbox360 的控制器。 XAudio2：主要用於低延遲遊戲音訊播放。 XACT：音訊函式庫和引擎，現已不支援 Windows。 DirectCompute：GPU 通用計算 API。 DirectXMath：針對遊戲最佳化的高速數學運算 API，特別支援單精度浮點運算及矩陣運算，使用 SSE2 指令集。 DirectSetup：用於 DirectX 元件的安裝，以及檢查 DirectX 的版本。 DirectX 媒體物件化：支援資料流物件，像是編碼、解碼和效果。 DirectML：利用 GPU 加速的機器學習和人工智慧 API。 DirectX Raytracing：即時光線追蹤 API。 DirectSR：由 GPU 提供的即時影像縮放技術，可允許開發者更方便的呼叫 DLSS，FSR，XeSS 等 API。 DirectStorage：一種允許 GPU 直接讀取 NVMe 裝置的 API，已在 Xbox 上實現。 Media Foundation：為 Windows 平臺提供統一的多媒體影音解決方案，取代了 DirectX Media。 廢棄元件 這些元件曾經也是 DirectX 的一員，但現在微軟只提供最低程度的維護，也不再建議使用。 DirectDraw：用於繪製 2D 圖形（不建議使用，雖然目前仍有大量的使用者），現開始被 Direct2D 取代。 DirectInput：用於結合鍵盤、滑鼠、搖桿，或其它的遊戲控制器，自 80 之後就不再更新。 DirectPlay：用於網路遊戲連線溝通，配合 DirectInput 使用，自 80 後就不再更新。 DirectSound：用於錄音，記錄波形音效已被 XAudio2 取代。 DirectMusic：用於 DirectMusic Producer 的錄音。 DirectX Media：包含 DirectAnimation 可用於 2D 的網頁動畫，DirectShow 可支援多媒體錄音以及資料流媒體，DirectX 在網頁上的轉換，還有 Direct3D 可保留 3D 影像更清晰的解析。DirectShow 亦包含有用於音訊訊號處理以及 DirectX 影片加速加速影音播放，已被 Media Foundation 取代。 歷史 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 31 中的 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 81 比較相似，但跟其他主機科技一樣不能更新，Xbox 版本也叫做 DirectXbox，但由於商業銷售緣故，還是被簡稱為 Xbox。J Allard PC Pro 採訪，2004 4 月 2002 年，微軟釋出了 DirectX 9，它支援最新的頂點陰影著色器 20 版本，又於 2004 年 4 月將 shader model 30（SM 30）加入了 DirectX 90c。 2005 年 4 月，DirectShow 從 DirectX 移除，加入到 Microsoft Platform SDK。 2010 年 6 月 7 日釋出的 DirectX SDK 是最後獨立釋出的 SDK 版本，之後的 DirectX SDK 被整合進新版的 Microsoft Windows SDK 裡。例如 DirectX 112 SDK 被放在 Windows Software Development Kit SDK for Windows 81 裡。 釋出歷史 DirectX 版本 執行中輸入 DxDiag 即可），編號統一使用 xxxxxxxxxxx 格式，而微軟網站上給出的編號使用 xxxxxxxxx 格式，如果網站上編號為 409000904，那麼在電腦上安裝後，會變為 40900000904。 作業系統 日期 備註 DirectX 10 4020095 1995 年 9 月 30 日 DirectX 20 未知 1996 年 DirectX 20a 403001096 Windows 95 和 NT 40 1996 年 6 月 5 日 DirectX 30 404000068 1996 年 9 月 15 日 DirectX 30 404000069 之後的 DirectX 30 加入了 Direct3D 404000069 1996 年 DirectX 30a 404000070 Windows NT 40 SP3 1996 年 12 月 最後支援 Windows NT 40 的版本 DirectX 30b 404000070 1996 年 12 月 30a 的一個小更新糾正了一個日文版本下的漏洞 DirectX 40 從未釋出 DirectX 4 從未釋出過，Raymond Chen 在他的書《The Old New Thing》中解釋說，DirectX 3 釋出之後，微軟開始同時開發 DX4 和 5，只是增加一些小特性的 DX4 版本會在短時間內完成，而 DX5 會增加大量新內容，遊戲開發者對 DX4 新特性的失望導致了 DX4 計劃的擱置。之後，微軟將重心完全轉移到 DX5 開發上。參見： DirectX 50 405000155 RC55 Windows NT 50 的測試版本 1997 年 7 月 16 日 DirectX 52 405011600 RC00 為 Windows 95 釋出的版本 1998 年 5 月 5 日 DirectX 52 405011998 RC0 只用於 Windows 98 1998 年 6 月 25 日 DirectX 60 406000318 RC3 Windows CE 上的 Dreamcast 版本 1998 年 8 月 7 日 DirectX 61 406020436 RC0 1999 年 2 月 3 日 DirectX 61a 406030518 RC0 只用於 Windows 98 SE 1999 年 5 月 5 日 DirectX 70 407000700 RC1 1999 年 9 月 22 日 DirectX 70 407000700 Windows 2000 2000 年 2 月 17 日 DirectX 70a 407000716 RC0 2000 年 3 月 8 日 DirectX 70a 407000716 RC1 2000 年 DirectX 71 407013000 RC1 只用於 Windows Me 2000 年 8 月 14 日 2D 與 3D 元件分離的最後一版（IDirectDraw7 與 IDirect3D7） DirectX 80 408000400 RC10 2000 年 11 月 12 日 2D 與 3D 元件整合的第一個版本（IDirectGraphic8）與 Vertex Shader 與 Pixel Shader DirectX 80a 408000400 RC14 最後支援 Windows 95 的版本 2001 年 2 月 5 日 DirectX 81 408010810 Windows XP，Windows Server 2003 和 Xbox 特別版 2001 年 10 月 25 日 DirectX 81 408010881 RC7 這個版本用於更早的作業系統（Windows 98 Windows Me 和 Windows 2000） 2001 年 11 月 8 日 DirectX 81a 408010901（RC） 2002 年 這個版本升級了 Direct3D（D3d8dll） DirectX 81b 408010901 RC7 2002 年 6 月 25 日 這個版本修正了 DirectShow 在 Windows 2000 上的一個漏洞（Quartzdll） DirectX 82 408020134 RC0 和 DirectX 81b 一樣，但包含了 DirectPlay 82 2002 年 DirectX 90 409000900 RC4 2002 年 12 月 19 日 （IDirectGraphic9）與 HLSL DirectX 90a 409000901 RC6 2003 年 3 月 26 日 DirectX 90b 409000902 RC2 2003 年 8 月 13 日 DirectX 90c 409000903 只用於 Windows XP SP2 DirectX 90c 409000904 RC0 2004 年 8 月 4 日 DirectX 90c 409000904 Windows XP SP2，Windows Server 2003 SP1，Windows Server 2003 R2 和 Xbox 360 2004 年 8 月 6 日 DirectX 90c 雙月更新 409000904 RC0 2006 年 10 月更新是最後支援 Windows 98、Windows Me 和 Windows 2000 的版本。2005 年 12 月更新和 2006 年 2 月更新增加了對 XML 的支援 兩月更新一次，開始於 2004 年 10 月，直到現在，最新版本：DirectX 90c Redist Jun 2010（2010 年 6 月） DirectX 100 600600016386 Windows Vista 2006 年 11 月 30 日 開始匯入 DXGI（DirectX Graphics Infrastructure）架構 DirectX 101 600600118000 Windows Vista Service Pack 1 與 Windows Server 2008 2008 年 2 月 4 日 DirectX 11 601760016385 Windows 7，Windows Server 2008 R2 2009 年 7 月 22 日 與 Windows 7 RTM 一同釋出 DirectX 11 601760117514 Windows 7 SP1，Windows Server 2008 R2 SP1 2010 年 11 月 23 日 KB976932，與 Windows 7 SP1 一同釋出 DirectX 11 600600218107 Windows Vista SP2，Windows Server 2008 SP2 2009 年 10 月 26 日 KB971512 DirectX 111 602920016384 Windows 8 2012 年 10 月 26 日 與 Windows 8 一同釋出，Windows 7 SP1 升級後部分支援 DirectX 112 603960016384 Windows 81、Windows RT 81、Windows Server 2012 R2 2013 年 10 月 18 日 包含於作業系統，無獨立程式包 DirectX 12 10001024016384 Windows 10 2015 年 1 月 18 日 包含於作業系統，無獨立程式包，並支援 Xbox One DirectX 12 Ultimate 1000190410928 Windows 10 build 19042 2020 年 11 月 10 日 加入 DirectX Raytracing Tier 11 光線追蹤，VRS（可變速率著色），Mesh Shader，Sampler Feedback（取樣器反饋） 相容性 硬體製造商要為每款硬體產品編寫驅動程式來支援 DX，甚至一些硬體商只編寫 DX 的驅動，這意味著要使用這款硬體就必須安裝 DX，早期的 DirectX 版本自帶了所有支援 DX 硬體的驅動程式，後來使用者可以透過自動更新系統下載適合的驅動。 DX10 之前的所有 DirectX 版本都保持向下相容性，即新版本相容舊版本，例如安裝了 DX9 的電腦，依然可以執行由 DX6 編寫的程式碼。安裝了 DX1112 的電腦，依然可以執行由 DX9C 編寫的程式碼，不過小部分依然需要安裝 DX9C。 各種版本 NET Framework 2002 年間，微軟釋出一個相容NET Framework 的 DX 版本，因而允許程式設計師充分利用NET 的特性編寫 DX 程式，這套 API 被稱為（MDX）。2005 年微軟在 DirectX 90c 版本上開發一套正對NET 平臺的 Managed API，即 Direct 90 for Managed Code 10（簡稱 Managed DirectX）。 2005 年 12 月、2006 年 2 月、4 月、8 月，微軟相繼釋出 DirectX 的更新版本，使之支援NET 20 框架。然而NET 20 版本至今只是個測試版。 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 101 是 DirectX 10 的改進版，隨 Vista SP1 出貨。 DirectX 11 DirectX 11 是 DirectX 10 的改良，只對效能和擴充套件性進行最佳化，主要改進在提供 Shader Model 50，加入對 MSAA 的直接取樣控制。大幅改進多執行緒效能，提供三個獨立的介面。進一步提高紋理壓縮，鑲嵌（tessellation）處理的效能，並加入 Compute Shader（DirectCompute）來支援 GPGPU，提供新版 HLSL 語言。 DirectX 111 是 DirectX 11 的改進版，隨 Windows 8 出貨。Windows 7 SP1 升級後部分支援。 DirectX 112 是 DirectX 111 的改進版，隨 Windows 81 出貨。 DirectX 12 DirectX 12 將更好支援多核心、多執行緒的最佳化，降低 GPU 處理瓶頸，並強化跨平臺功能，可有效支援微軟各式平臺，並提升硬體功耗表現。隨 Windows 10 出貨並支援 Xbox One。 2019 年 3 月 13 日，微軟於 DirectX Developer Blog 表示，未來魔獸世界 815 的遊戲更新將使 Windows 7 平臺使用者也能體驗 DirectX 12 的多執行緒渲染優勢，並提高遊戲效能。且未來陸續也會有其他廠商推出相關更新，將更多的 D3D12 遊戲移植到 Windows 7。 DirectX 標誌的變更 縱觀 DX 的各個版本，X 都是一個核輻射警告標志或一隻螺旋槳葉片。這個設計引發了不小的爭議，因為 DX 計劃的原名叫做 曼哈頓計劃，這個名稱來源於美國的核武器研製計劃，最終美國使用核武器轟炸了日本的廣島和長崎，這在暗示 DX 產品要替代日本在電子遊戲方面的霸主地位。這一說法被微軟公開否定，微軟表示這只是出於藝術設計的考慮。 參見 圖形裝置介面（GDI） GGI（通用圖形介面） Graphics pipeline DxDiag DirectX plugin ActiveX Microsoft XNA 支援 DirectX 10 遊戲列表 支援 DirectX 11 遊戲列表 其他 API Metal Mantle SDL OpenMAX OpenML OpenGL OpenAL 參考資料 外部連結 Microsofts MSDN 文件 資源中心 DirectSetup Documentation GameDev 關於 DX 的資料 OpenGL 3 DirectX 11 The War Is Over Introduction Toms Hardware 中關村線上 見證 3D 進化之路－DirectX 發展歷史回顧 DirectX 知識庫 程式設計俱樂部 CategoryWindows API