高度なデバイス選択
DXUT は、ユーザーが指定した機能のセットから最適なデバイスを列挙して選択します。たとえば、ハードウェア デバイスと特定のバック バッファー フォーマットが必要であるとします。HAL デバイスでバック バッファー フォーマットはサポートされていないが、リファレンス デバイスではこのフォーマットがサポートされている場合、関数によって、ハードウェア デバイスと別のフォーマットを選択するか、リファレンス デバイスと要求されたフォーマットを選択する必要があります。
DXUT では、DXUTFindValidDeviceSettings による高度なデバイス選択がサポートされています。
HRESULT DXUTFindValidDeviceSettings(
DXUTDeviceSettings* pOut,
DXUTDeviceSettings* pIn,
DXUTMatchOptions* pMatchOptions )
この関数に、必要なデバイス設定 (pIn) と一致オプション一式 (pMatchOptions) を指定すると、必要なデバイス設定に最も適合するデバイス設定 (pOut) が返されます。
それぞれの一致オプションには、デバイスの選択方法を決定する独自の照合型を指定できます。利用可能な照合型には、次の 3 つがあります。
- DXUTMT_CLOSEST_TO_INPUT - 最も近い一致を選択する
- DXUTMT_IGNORE_INPUT - 一致する必要はない
- DXUTMT_PRESERVE_INPUT - 正確に一致する必要がある
DXUTFindValidDeviceSettings では、有効なデバイス設定が見つからない場合は失敗コードが返されますが、見つかった場合は成功コードが返され、有効なデバイス設定が pOut に書き込まれます。
DXUT の残りの部分の使用とは無関係に、DXUTFindValidDeviceSettings を使用できます。
DXUT のデバイス選択ダイアログのカスタマイズ
DXUT のデバイス選択ダイアログに表示されるこれらのデバイス設定 (アダプターの序数、デバイス タイプ、アダプター フォーマット、バック バッファー フォーマット、およびウィンドウ表示) のいずれかを制御するには、LPDXUTCALLBACKISD3D9DEVICEACCEPTABLE コールバック関数または LPDXUTCALLBACKISD3D10DEVICEACCEPTABLE コールバック関数を使用します。その他のデバイス設定を制御するには、DXUTEnum.cpp で定義されている CD3D9Enumeration メンバー関数を使用します。
たとえば、次のように、ダイアログで使用可能な深度ステンシル フォーマットを制御します。
CGrowableArray<D3DFORMAT>* pDSList;
pDSList = DXUTGetD3D9Enumeration()->GetPossibleDepthStencilFormatList();
nIndex = pDSList->IndexOf( D3DFMT_D16 );
if( nIndex >= 0 ) pDSList->Remove( nIndex );
nIndex = pDSList->IndexOf( D3DFMT_D24X8 );
if( nIndex >= 0 ) pDSList->Remove( nIndex );
nIndex = pDSList->IndexOf( D3DFMT_D24S8 );
if( nIndex >= 0 ) pDSList->Remove( nIndex );
このサンプル コードのように、CD3D9Enumeration 関数への呼び出しは、デバイスが作成される前に行う必要があります。この関数は、DXUTEnum.h 内で宣言されています。