WisdomSoft - for your serial experiences.

DirectXとは

DirectX は Windows や Xbox 360 などで使える、ゲームやマルチメディアなどの高速な描画が要求されるアプリケーション開発に用いられる API です。

ハードウェアの性能を引き出す

DirectX は Micrsoft が自社のプラットフォーム向けに提供するゲームやマルチメディア処理に特化した API の総称です。開発者は DirectX を使用することで、ハードウェアの性能を最大限に発揮させることができ、高速な描画やサウンド制御、ゲームコントローラの利用などが可能となります。DirectX の主な用途はゲーム開発ですが、ゲーム以外でも高品質でリアルタイムな描画が必要なアプリケーションの開発に応用できます。

DirectX は C++ で書かれているネイティブの API であり .NET Framework ではありません。したがって、そのままの状態では C# や Visual Basic から利用することはできませんが、C++/CLI を用いて相互運用することは可能です。

Windows では、古くからウィンドウの描画には GDI (Graphics Device Interface)が用いられていました。GDI は基本的な 2D 処理の API のみで構成されているため、古いハードウェアでも実行可能な高い互換性がありますが、GDI はハードウェアを抽象化するためゲームのような高速な処理には適していません。また、Windows Vista 以降はデスクトップの描画にも DirectX が用いられるようになったため、GDI の描画は CPU によるソフトウェア処理で行われます。

DirectX に対応したハードウェアであれば、描画の計算を CPU ではなく、専用のハードウェアで行うため高速になります。通常、DirectX による描画は GPU (Graphics Processing Unit)によって処理されます。GPU は CPU とは異なり、並列処理に特化したアーキテクチャになっています。画像処理は、大量のピクセルや頂点データの変換や合成なので、直列的な計算速度よりも、並列的な処理が重要になるのです。

このように、特定の処理を専用のハードウェアで処理することをアクセラレーションと呼び、CPU を補助する追加の演算装置をアクセラレーター(または、最近は使われない表現だがコプロセッサとも)と呼びます。

DirectX はハードウェアの性能を引き出すために、OS やハードウェアの進化に合わせて頻繁にバージョンアップします。DirectX を利用するゲームやアプリケーションを動作させるには、OS やハードウェアが DirectX に対応していなければなりません。特に、描画処理に大きく影響する GPU の性能が重要になります。

また、DirectX は Microsoft が提供するシステムにおいてクロスプラットフォームです。Windows PC だけではなく Xbox 360 の開発にも使われており、Windows 8 の新しい UI にも対応しています。

DirectX と COM

DirectX は COM (Component Obect Model)として実装されているため、その設計は COM の規約に従っています。

COM は Microsoft が提唱するコンポーネントの設計規約であり、プログラミング言語や実行環境に依存することなく、定められたインターフェイスを通してオブジェクトが提供するサービスにアクセスできます。COM を用いることで、部品化されたソフトウェアを再利用・共有できるため、現在の Windows のコアを構成する重要な技術基盤となっています。

DirectX を利用するのに COM の知識は必ずしも必要ではありませんが、COM を理解することで DirectX の仕組みを深く理解でき、他のコンポーネントとの連携なども容易になるでしょう。

DirectX の種類

DirectX はバージョンによって構成が大きく異なるため、開発対象のバージョンと OS を事前に検討しなければいけません。最新の DirectX を使えば、新しい Windows OS や GPU の性能は引き出せますが、古い Windows やハードウェア環境では動作しなくなります。逆に、古い DirectX を使えば最新の機能や API が使えません。

まず、DirectX は Windows Vista の登場とともに大きく変更されており、Windows XP 以前の Windows をサポートするかどうかで選択が分かれます。Windows XP 以前は DirectX 9.0 が最新のバージョンであり、DirectX 10.0 以降のバージョンを使うことはできません。Windows XP と Xbox 360 の寿命が非常に長かったため、ゲーム業界では DirectX 9.0 世代の実装が 2012 年現在でも多く見られます。

Windows Vista から DirectX 10.0 が提供されましたが、Windows Vista が市場で成功しなかったため DirectX 10.0 世代は短命に終わり、Windows 7 と共に登場した DirectX 11 世代が現在の主流です。コンピュータにインストールされている DirectX のバージョンを確認するには dxdiag.exe (DirectX 診断ツール)を使います。

図1 DirectX 診断ツール
図1 DirectX 診断ツール

DirectX は複数の部品群からなる総称です。描画や入出力など、その役割に応じてライブラリに分けられており、開発者は必要なライブラリだけを利用できます。多くの場合 DirectX はゲーム開発に用いられるため、ゲーム画面を描画する 3D 処理が必須になると思われますが、テキストの描画やオーディオ処理のために DirectX を使うということも可能です。

表1 DirectX に含まれるライブラリ
ライブラリ 説明
Direct3D 3D グラフィックスの描画に使用する
Direct2D 2D グラフィックスの描画に使用する
DirectXMath ベクトルや行列などの数学処理に使用する
DirectWrite テキストの描画とレイアウトに使用する
XAudio2 オーディオデバイスの制御、オーディオの再生やミキシングに使用する
XInput Xbox 360 コントローラーからの入力や制御に使用する

上記のライブラリも、利用できる機能は DirectX のバージョンによって変わります。