Platform SDK: DirectX |
注 : ここでは、C++ でのアプリケーション開発について説明する。DirectX for Visual Basic では COM インターフェイスは使用しない。また、実行バッファを使用したレンダリングはサポートしていない。
C++ で記述されたアプリケーションでは、デバイス インターフェイスを使用して、Direct3DDevice オブジェクトのレンダリング ステートとライティング ステートを操作し、レンダリング処理を実行する。Direct3D にはデバイス用の COM インターフェイスとして、IDirect3DDevice、IDirect3DDevice2、IDirect3DDevice3、および IDirect3DDevice7.の 4 つがある。これらのインターフェイスの基本になるのは、最初の 3 つのインターフェイスをすべてまたは IDirect3DDevice7 インターフェイスのみ公開する 2 つの COM オブジェクトのいずれかである。アプリケーションで使用するデバイス オブジェクト、つまりインターフェイスは、そのデバイスの作成に使用するメソッドに完全に依存する。詳細については、「Direct3D デバイスの作成」を参照すること。従来の IDirect3DDevice、IDirect3DDevice2、および IDirect3DDevice3 インターフェイスは、DirectX 7.0 より以前のバージョンの DirectX で公開されている機能とレンダリング機能を表す。このドキュメントでは、これらのオブジェクトを旧デバイスとして扱っている。IDirect3DDevice7 インターフェイスを公開するオブジェクトは、このドキュメントでは新しいデバイスとして扱い、レンダリング機能の最新セットを表す。アプリケーションでは、IUnknown::QueryInterface メソッドを使用しても、これら新旧のインターフェイス間で移行することはできない。これは、旧デバイス オブジェクトが最新機能に対応していないことと、新しいデバイス オブジェクトは後方互換性よりもパフォーマンス最適化のために設計されていることが理由である。Direct3D では、アプリケーションで使用するインターフェイスを事前に選択する必要がある。
このドキュメントでは、一般に、最新インターフェイスが使用されることを前提としている。ただし、以前の実装についての知識が役立つ場合もある。旧バージョンの DirectX で公開されていた IDirect3DDevice インターフェイスは、実行バッファを使用するプログラミング用のメソッドを提供している。実行バッファは、主に後方互換性を保つために提供されていた。それ以降の DirectX のバージョンでは、よりシンプルな DrawPrimitive モデルが使用されるようになり、シーンをレンダリングするためのコードが非常に簡素化されたため、実行バッファは使用されなくなった。DrawPrimitive によるレンダリングは、IDirect3DDevice インターフェイス以降のすべてのインターフェイスで採用されている。DirectX 7.0 の Direct3D 直接モードでは IDirect3DDevice7 インターフェイスが新しく使用されるようになり、作業がより一層簡素化されると同時に、ハードウェア アクセラレーションを利用できるようになった。IDirect3DDevice7 を公開するデバイス オブジェクトでは、何らかのハードウェアで実行している場合ハードウェア アクセラレーションによるトランスフォーム & ライティング処理を実行できる。詳細については、「DirectX 7.0 での直接モードの変更点」を参照すること。これらのインターフェイスは、いくつかの共通のメソッド、特に DrawPrimitive のレンダリングを実行するインターフェイスを共有している。詳細については、「レンダリング」を参照すること。
DirectX 5.0 で IDirect3DDevice2 インターフェイスが導入される以前は、Direct3D デバイスが DirectDrawSurface オブジェクトへのインターフェイスであった。IDirect3DDevice2 および IDirect3DDevice3 インターフェイスが実装するのは、Direct3DDevice オブジェクトが DirectDraw サーフェスからまったく独立しているデバイス オブジェクト モデル、およびライティング、マテリアル、ビューポートなどはシーンをレンダリングするために 1 つまたは複数のデバイスに関連付け可能なオブジェクトであるという概念である。一方、IDirect3DDevice7 インターフェイスは、ライティング、マテリアル、およびビューポート パラメータを個別のオブジェクトからデバイス自体に移動することにより、Direct3D オブジェクトモデルをさらに簡素化している。
注 : IDirect3DDevice3 と IDirect3DDevice7. 間にはインターフェイスのバージョン番号はない。
Direct3D デバイス オブジェクトは DirectDraw サーフェスから独立して、独自に寿命を持っている。したがって、Direct3D デバイス オブジェクトは、アプリケーションで必要な場合にはいつでも、さまざまな DirectDraw サーフェスをレンダリング ターゲットとして使用できる。詳細については、「IDirect3DDevice7::SetRenderTarget」を参照すること。