Platform SDK: DirectX |
特定のディスプレイ デバイスを構成しているコンポーネントや、システムのデバイスを列挙するために Direct3DX ユーティリティ ライブラリにより提供されている機能について詳しく説明する。
Direct3D アプリケーションが Direct3DX ユーティリティ ライブラリを使用するためのグラフィック設定 (ディスプレイ デバイス) は、次のコンポーネントにより構成されている。
これらのコンポーネントがあれば、広範囲のディスプレイ オプションを特定のシステムで使用できる。たとえば、あるシステムで複数のモニタを使用できる。2D グラフィック デバイスは、ビデオ アクセラレートを使用することも、使用しないことも可能である。3D グラフィック デバイスは必要な数だけ RAMP、RGB、REFERENCE、HW、または TL HW デバイスを使用できる。
デバイス タイプの詳細については、Direct3D 直接モードのドキュメントの「Direct3D デバイスの種類」を参照すること。
ほとんどの場合、ディスプレイ オプションの組み合わせがすべてシステムでサポートされるわけではない。一般に、3D カードは特定のモニタに接続される。また、2D エンジンのエミュレーションを選択すると、3D エンジンのハードウェアを選択できなくなる。このような競合を解決し、有効なハードウェア設定を判定するには、アプリケーションでシステムのデバイスを列挙する必要がある。
例として、システム上の DirectDraw デバイスの数を判定し、DirectDraw デバイスごとにその最上位ハードウェア アクセラレートを選択するコードを示す。結果として、選択したデバイスに対応するデバイス リストへのインデックス リストが返される。
dwNumDevices = D3DXGetDeviceCount(); hr = D3DXGetDeviceDescription( 0, &pDeviceList[0] ); GUID guidLastUniqueDeviceId = pDeviceList[0].ddDeviceID; cNumDDObjs = 1; indexOfChosenD3DXDevices[0] = 0; // start by picking the first device for( i = 1; i < dwNumDevices; i++ ) { hr = D3DXGetDeviceDescription( i, &pDeviceList[i] ); if( pDeviceList[i].ddDeviceID != guidLastUniqueDeviceId ) { guidLastUniqueDeviceId = pDeviceList[i].ddDeviceID; cNumDDObjs++; indexOfChosenD3DXDevices[cNumDDObjs-1] = i; } else { int currIndex = indexOfChosenD3DXDevices[cNumDDObjs-1]; if( pDeviceList[i].hwLevel > pDeviceList[currIndex].hwLevel ) { indexOfChosenD3DXDevices[cNumDDObjs-1] = i; } } }
この例では、D3DXGetDeviceCount 関数を使用してシステムで列挙可能なデバイスの数を取得している。また、D3DXGetDeviceDescription 関数を使用して、列挙されたデバイスの記述を取得して、そのインデックス値によりデバイスを識別している。
注 : Direct3DX ユーティリティ ライブラリを使用する場合は、適切なデフォルト値が Direct3DX コンテキスト オブジェクトに組み込まれるので、アプリケーションからデバイスを列挙する必要はない。
D3DXCreateContext 関数と D3DXCreateContextEx 関数の両者には、デフォルト デバイスを作成するためのパラメータがある。しかし、高度なゲームやアプリケーションでは、ユーザーがこれまでに使用したことのあるグラフィックをカスタマイズできるように、すべてのデバイスを列挙する。