DirectX

DirectX（Direct eXtension，縮寫：DX），是由微軟公司建立的一系列專為多媒體以及遊戲開發之應用程式介面（API）。旗下包含Direct3D、Direct2D、DirectCompute等等多個不同用途的子部份，因為這一系列API皆以Direct字樣開頭，所以DirectX（只要把X字母替換為任何一個特定API的名字）就成為這一巨大的API系列的統稱。目前最新版本為DirectX 12，隨附於Windows 10與Windows 11作業系統之上。
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：用於結合鍵盤、鼠標、搖桿，或其它的遊戲控制器。
*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：用於結合鍵盤、滑鼠、搖桿，或其它的遊戲控制器，自8.0之後就不再更新，從DirectX 9開始在XBOX內由XInput取代。
*DirectPlay：用於網路遊戲連線溝通，配合DirectInput使用，自8.0後就不再更新。
*DirectSound：用於錄音，記錄波形音效已被XAudio2取代。
*DirectMusic：用於DirectMusic Producer的錄音。
*DirectX Media：包含DirectAnimation可用於2D的網頁動畫，DirectShow可支援多媒體錄音以及資料流媒體，DirectX在網頁上的轉換，還有Direct3D可保留3D圖像更清晰的解析。DirectShow亦包含有DirectX插件用於音頻信號處理以及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 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。

**各種版本**

**.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文檔&資源中心date=20111113204257 - DirectSetup Documentationdate=20101225050931 - GameDev'關於DX的資料- OpenGL 3 & DirectX 11: The War Is Over: Introduction - Tom's Hardware- 中關村在線 - 見證3D進化之路－DirectX發展歷史回顧date=20070318205054 - DirectX知識庫 / 程式設計俱樂部date=20110903083530