Microsoft DirectX
そのほか、旧DirectX SDKにはDXUTと呼ばれるフレームワークがソースコードごと同梱されており、SDKに付属するマイクロソフト公式のサンプル実装に使われていたほか、NVIDIA・インテル・AMDといったハードウェアベンダーが独自に作成・公開するDirectXサンプルにもフレームワークとしてしばしば使われていたが、DXUTもWindows SDK 8.0以降には同梱されない。DXUT自体はDirectX 11.x用のもの (DXUT11) がGitHubにて公開・メンテナンスされている。Effects 11 (FX11) と呼ばれるシェーダーエフェクトフレームワークも、DXUT同様にGitHubに移管されている。また、Visual Studio 2012以降には、Direct3D/Direct2DベースのWinRTアプリケーションプロジェクトテンプレートが含まれている。
旧DirectX SDKの最終バージョンJune 2010がサポートするVisual Studioはバージョン2008/2010のみだが、旧SDKに付属していたサンプルのうち、多くはVisual Studio 2012以降向けに更新されたものがMSDN Code Galleryに移管されている。この更新によってD3DXなどの廃止されたライブラリへの依存も排除されている。MSDN Code Galleryの廃止に伴い、これらのサンプルはGitHubに移管された。
なお、DirectX Graphics SamplesがMITライセンスでGitHubにて公開されており、DirectX 12のサンプルおよびユーティリティライブラリが含まれている。例として、Direct3D 12用のC++ヘッダーベース補助ライブラリであるD3D12 Helper Library (d3dx12.h)、DirectX 12 EngineのStarter KitであるMiniEngine、Direct3D 12用メモリ管理ライブラリであるD3D12 Residency Starter Libraryなどが含まれている。
かつてDirectX 7.0およびDirectX 8.0でC++向け以外にVisual Basic用のインターフェイスが提供されたものの、基本的にDirectXはC++言語専用のAPIである。ここでは.NET Framework言語環境向けにラップされたマネージコードライブラリを紹介する。
Managed DirectXは.NET Frameworkで動作するアプリケーションからDirectXを呼び出すためのAPIである。Managed DirectXを使うと、.NET Framework上で動作するどんな言語からでもDirectXを呼び出すことができる。また、テクスチャオブジェクトをSystem.Drawing.Bitmapオブジェクトから生成できるなど、.NET Frameworkとの相互運用も強化されている。なお、Managed DirectX 1.1のグラフィックスコンポーネントはDirect3D 9およびD3DX 9を内部で使用している。Managed DirectX 1.1の後継であるManaged DirectX 2.0の開発は中止され、Microsoft XNA (XNA) に置き換えられることになったが、そのXNAも2014年4月に開発・サポートを終了した。
XNAおよびXNA Game StudioはWindows、Xbox 360、Windows Phone、およびZune用のマルチプラットフォーム対応ゲーム開発環境・実行環境である。対応するアプリケーション開発言語はC# (Visual C#) のみであり、VB.NETやC++/CLIなどの他の.NET言語からは利用できない。グラフィックスコンポーネントの内部ではDirect3D 9が使用されている。
Managed DirectX 2.0はキャンセルされたが、後継のXNAは基本的にC#からしか利用できない上、Xbox 360とWindows双方に互換性のあるコードを記述することを主目的として開発されており、Managed DirectXの方向性とはやや異なるAPI(ゲームアプリケーション向けのフレームワーク)となっている。このため、Windowsプラットフォームにおける.NET用にDirectXのAPIをカプセル化した、SlimDXと呼ばれるライブラリが有志によって開発・提供されていたが、2012年1月を最後に更新されておらず、公式サイトも2019年現在は消失している。SlimDXはMDXのように、Direct3Dコアライブラリに加えてDirect3D拡張ライブラリであるD3DXもカバーする。
SharpDXはDirectX Graphics、DirectX Audio、DirectX Inputなどのマネージラッパーを提供するオープンソースのプロジェクトである。ライセンス形態はMITライセンスとなる。SharpDXは従来のデスクトップアプリのほか、Windowsストアアプリからも利用できる。バージョン2.6.3時点でDirectX 9、DirectX 10、DirectX 11をサポートする。Windows 10と同時に正式リリースされたDirectX 12 (Direct3D 12) も、バージョン3.0にて対応したが、DirectX 10 (Direct3D 10) など一部のレガシーAPIのサポートが終了している。2019年5月をもって、開発を終了することがアナウンスされた。
マイクロソフトによる公式のマネージコード用ライブラリ。Windows VistaやWindows 7の拡張的なUI機能等の対応が主な内容だが、DirectX 10以降のサポートも含まれている。2009年4月からアルファ版が公開されていたが、同年8月6日にバージョン1.0に移行した。Windows API Code Packでは、以下のDirectX APIがサポートされている。
Direct3D 11.0
Direct3D 10.0/10.1
DXGI 1.0/1.1
Direct2D 1.0
そのほか、Windows Imaging Component (WIC) のサポートも含まれるが、DirectWriteとWICは部分的なサポートにとどまる。
Windows API Code Pack 1.1のリンクは2015年9月現在消失しており、ダウンロードできなくなっているが、NuGet経由で1.0.0をダウンロードできる。
DirectXのうちDirectX Graphics (Direct3D) は、同じくリアルタイム3次元コンピュータグラフィックス (3DCG) を扱うためのAPI集合であるOpenGLとしばしば比較される。
主な違いは、DirectXは基本的に3DグラフィックAPIのみに限定されるものではなく、サウンド処理やヒューマンデバイス入出力処理、ネットワーク処理までを内包するトータルなマルチメディアアプリケーション(代表的なものはゲームなど)の作成用API/SDKを指向するものである一方、OpenGLは純然たる3DグラフィックAPIとして設計されている点にある。またDirectXはWindowsや、Windows系OSを採用したDreamcastやXbox、Xbox 360等のゲーム機の動作する限られたプラットフォームでしかサポートされないのに対し、OpenGLはクロスプラットフォームであるという点である。
DirectXはその出自から、主にWindows用ゲームの分野で使用されてきたが、Direct3Dに関しては同環境における標準的な3DグラフィックAPIとしても用いられるようになり、ゲームに限らない一般的な3DアプリケーションやOSのグラフィカルシェル環境にまで用いられるようになった。また、Direct2D/DirectWriteはIEやFirefoxといったWebブラウザーにおけるレンダリングエンジンのハードウェアアクセラレーターとして採用されている。
一方のOpenGLは、歴史的および機能的な理由から、3DCGの製作工程やCAD、データ可視化などの用途に、グラフィックワークステーションやEWS等のプロフェッショナルな分野で使用されてきた。またパーソナルユーザー向けの3Dデスクトップ環境において標準的な描画APIとしても用いられており、これらの環境では3DビデオゲームのグラフィックAPIとしても標準的な立場にある。このように、両者をその用途によって明確に区別することは困難となりつつある。
また、Direct3Dが標準的な3DグラフィックAPIとして定着したPC/Windows系の環境においてもOpenGLは今なお共存しており、実際にDirectXの登場以前から登場初期頃には、PC (Windows) 用ゲームの3DグラフィックAPIとしてOpenGLや、OpenGLを簡略化し3dfx社製グラフィックカードVoodooの専用APIとしたGlideがデファクトスタンダードとして用いられて来た歴史もあり、両者を比較する文脈においてよく言われるような単純な競合関係として説明することも、実態として困難と言える。Windows環境においては、3DCG製作ソフトにおける作業中のリアルタイムプレビュー表示に、Direct3DとOpenGLのうちどちらを使用するかをユーザーが選択できるものも存在する。
WindowsがOS標準機能でサポートするOpenGLバージョンは1.1までであり、グラフィックスハードウェア (GPU) ベンダーが提供しているOpenGL対応ドライバー (Installable Client Driver, ICD) をインストールするまで、(たとえハードウェアがOpenGL 1.2以降をサポートしていても)OpenGL 1.2以降の機能を使用することはできない。また、OpenGL 1.2以降で追加された関数を使用するには、ICDがインストールされた状態で、wglGetProcAddress()関数を使用してエントリポイント(関数ポインタ)を取得する必要がある。ICDがインストールされていない状態では、ソフトウェアやDirect3DラッパーによるOpenGL 1.1実装が使用される。
Windows Vistaには最初からグラフィックスドライバーがプリインストールされているが、そのドライバーのOpenGLレイヤーはソフトウェア実装であり、OpenGLを利用したグラフィックスソフトウェアを満足に動作させることはできない。グラフィックスハードウェアベンダーのICDをインストールするまで、OpenGL APIによってハードウェアアクセラレーターを直接駆動することはできない。
GoogleのANGLE (ソフトウェア)プロジェクトのように、OpenGLそのものではなく、内部でDirect3Dを使用したラッパーを経由して、Windows上でWebGLやOpenGL ESを間接的に実現するライブラリも存在する。ANGLEはハードウェアベンダーのOpenGLドライバー(ICD)を経由せず、Direct3Dを利用してOpenGL APIを実現している。
DirectXはバージョン11において、GPGPU用APIであるDirectComputeをDirect3Dの一部(コンピュートシェーダー)として包括的に実装している。OpenGLもまたバージョン4.3において、Direct3Dと同様のコンピュートシェーダーを導入している。なお、Direct3D/OpenGLともに、GPGPUを含むクロスプラットフォームなヘテロ環境用アクセラレーターAPIであるOpenCLとの連携(相互運用)を行なう拡張機能が用意されている。