[C++]
DirectX 7.0 では、旧リリースの DirectX のオブジェクトとインターフェイスを公開およびサポートすることにより、後方互換性を維持している。ただし、IDirect3D7 および IDirect3DDevice7 の 2 つの主要な Direct3D インターフェイスが DirectX 7.0 の構成要素として追加されている。これらのインターフェイスは、旧リリースのオブジェクトとは異なる新しいオブジェクトへのインターフェイスである。旧バージョンの DirectX のオブジェクトと比較した場合、これらの新しいオブジェクトにはいくつかの新機能があり、パフォーマンス向上を実現し、簡単に拡張することができる。
- ハードウェア アクセラレーションによるトランスフォーム & ライティング
- 現在 Direct3D では、3D アクセラレータを利用してハードウェアでのトランスフォーム & ライティング処理を高速化している。対応ハードウェアが使用可能な場合、IDirect3D7::EnumDevices メソッドによって、対応する D3DDEVICEDESC7 構造体の dwDevCaps メンバに D3DDEVCAPS_HWTRANSFORMANDLIGHT 能力フラグを設定する。詳細については、「TnLHAL デバイス」を参照すること。
- キューブ環境マップによる環境マッピング
- 現在 Direct3D および DirectDraw では、環境マッピングで使用する特殊なテクスチャ マップをサポートしており、これをキューブ環境マップと呼ぶ。キューブ環境マップを実行するときは、シーンのオブジェクトに適用する画像を含む 6 面テクスチャを使用する。キューブ環境マップにより、アプリケーションではリアルな環境マッピングを簡単に実行でき、動的な環境マッピングも可能である。
- API の変更点
- Direct3D for DirectX 7.0 では、ライティング、マテリアル、およびビューポートのパラメータをデバイス インターフェイスに移動する。したがって、これらのパラメータを処理する個別のオブジェクトは必要なく、そのインターフェイスも必要ない。これらのパラメータを処理するために、いくつかのメソッドが IDirect3DDevice7 インターフェイスに追加されている。
現在、頂点バッファはストライド頂点で使用できる。これは、IDirect3DVertexBuffer7::ProcessVerticesStrided メソッドを新しい IDirect3DVertexBuffer7 インターフェイスに追加することで実現されている。
- ジオメトリ ブレンディング
- Direct3D ジオメトリ パイプラインを使用するアプリケーションでは、新たにサポートされるジオメトリ ブレンディングを利用できる。ジオメトリ ブレンディングは、特にキャラクタなどシーン内の個々のオブジェクトをリアルに表現する "スキニング" エフェクトを施す。詳細については、「ジオメトリ ブレンディング」を参照すること。
- デバイス ステート ブロック
- IDirect3DDevice7 インターフェイスを対象とするアプリケーションでは、プログラム可能なステート変更セットを利用でき、これをステート ブロックと呼ぶ。ステート ブロックにより、Direct3D アプリケーションではデバイスのステート変更を共通の順序で、固有の識別子、つまりブロック ハンドルを持つ構成要素に記録できる。アプリケーションでは、ブロック ハンドルを使用して、以前に記録されたステート ブロックを 1 回のメソッド呼び出しで実行できる。ステート ブロックにより、呼び出しを最小限に抑えてデバイス ステートを変更できるほかにも、デバイスでは実行を最適化するためにステート変更のプリコンパイル済みセットをキャッシュしておくことができる。これにより通常はパフォーマンスが向上する。詳細については、「ステート ブロック」を参照すること。
- テクスチャ管理の向上
- Direct3D テクスチャ マネージャが、アプリケーション側で管理下のテクスチャに優先順位を付けることができるように拡張されている。Direct3D では、テクスチャの優先順位に従って、メモリに保持するテクスチャや、メモリから削除するテクスチャを決定する。
- Visual Basic アプリケーションのサポート
- DirectX 7.0 のその他のコンポーネントと同様、Direct3D 直接モードでは現在、Visual Basic アプリケーションにサービスを提供する。このサービスの提供は、Visual Basic アプリケーションから DirectX ランタイムにデータを配置するクラス セットによって実現している。また、この SDK のドキュメントからは、Visual Basic 開発者も対象となっている。
- 拡張ソフトウェア エミュレーション
- Direct3D は、CPU でサポートされる特殊な命令を使用できるように最適化されている。サポートされる命令セットには、いくつかの AMD プロセッサの AMD 3D-Now! 命令セットや、多くの Itel プロセッサでサポートされる MMX 命令セットなどがある。これらの命令セットが使用可能な場合、Direct3D では 3D-Now! 命令セットを利用してトランスフォーム & ライティング処理を高速化し、MMX 命令セット利用してラスタ化を高速化する。Direct3D のトランスフォーム & ライティング パイプラインを使用するアプリケーションでは、この機能によって自動的に高速処理が実現する。
Direct3D オブジェクトの新しいセットへの移行では多少の犠牲が生じる。Direct3D オブジェクトは、サポートするインターフェイスの名前には関係なく、旧リリースで対応するオブジェクトとは異なるもので、同じインターフェイスをサポートしていない。IUnknown::QueryInterface を使用しても、新しいインターフェイスをサポートするオブジェクトからは従来のインターフェイスを取得できない。また、従来のオブジェクトから新しいインターフェイスを問い合わせることもできない。これらの処理の実行は失敗し、E_NOINTERFACE が返される。
レンダリングに実行バッファを使用する既存のアプリケーションでは、その実行バッファ アーキテクチャを破棄しない限り、新しいオブジェクトを使用することはできない。実行バッファ アーキテクチャを破棄しないのであれば、従来のオブジェクト (引き続きサポートされる予定) を使用しなければならない。実際、実行バッファのレンダリングは一般には行われなくなっている。このことから、実行バッファの使用については、このドキュメントでは説明しない。