DirectX

**DirectX**（**Direct** e**X**tension，縮寫：**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 影片加速加速影音播放。
* 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 硬體的驅動程式，後來使用者可以通過自動更新系統下載適合的驅動。

一些驅動程式只支援某個版本的 DX，DX10 之前，所有 DirectX 版本都保持向下相容性，即新版本相容舊版本，例如安裝了 DX9 的電腦，依然可以執行由 DX6 編寫的程式碼。安裝了 DX11 的電腦，依然可以執行由 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）處理的效能，並加入 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。

## 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

## 參考資料

## 外部連結

* Microsoft's MSDN 文件 & 資源中心（頁面存檔備份，存於網際網路檔案館）
* DirectSetup Documentation（頁面存檔備份，存於網際網路檔案館）
* GameDev' 關於 DX 的資料
* OpenGL 3 & DirectX 11: The War Is Over : Introduction - Tom's Hardware
* 中關村在線 - 見證 3D 進化之路－DirectX 發展歷史回顧（頁面存檔備份，存於網際網路檔案館）
* DirectX 知識庫 / 程式設計俱樂部（頁面存檔備份，存於網際網路檔案館）