Platform SDK: DirectX |
ここでは、C および C++ でのアプリケーション開発について説明する。Visual Basic については、「Direct3D 直接モード Visual Basic チュートリアル」を参照すること。
IDirect3D7::EnumDevices メソッドは、システムにインストールされているすべての Direct3D デバイス ドライバを列挙する。Enumeration アプリケーションでは、次のパラメータを使用して EnumDevices 関数を呼び出す。
pD3D->EnumDevices( DeviceEnumCallback, &d3dDeviceInfo );
第 1 引数 DeviceEnumCallback, は、列挙の際 Direct3D デバイスが渡されるたびに呼び出される D3DEnumDevicesCallback7 コールバック関数のアドレスである。第 2 パラメータは、列挙中のデバイスを記述する D3DDEVICEINFO 構造体への参照である。
列挙されるデバイスごとに、次の関数が呼び出される。
static HRESULT WINAPI DeviceEnumCallback(LPSTR strDesc, LPSTR strName, D3DDEVICEDESC7* pDesc, VOID* pParentInfo ) {
最初の 2 つのパラメータは、それぞれデバイスの説明および名前の文字列である。第 3 パラメータ pDesc は、Direct3D デバイスのハードウェア能力を記述する D3DDEVICEDESC7 構造体である。この関数の詳細については、SDK リファレンスの「D3DEnumDevicesCallback7」の項目を参照すること。
次のコードで、列挙中のデバイスにデバイス情報を設定できる。
D3DDEVICEINFO* pDriverInfo = (D3DDEVICEINFO*)pParentInfo; D3DDEVICEINFO* pDeviceInfo = &g_d3dDevices[g_dwNumDevices]; memcpy( &pDeviceInfo->ddDeviceDesc, pDesc, sizeof(D3DDEVICEDESC7) ); pDeviceInfo->guidDevice = pDesc->deviceGUID; pDeviceInfo->pDeviceGUID = &pDeviceInfo->guidDevice; pDeviceInfo->bHardware = pDesc->dwDevCaps & D3DDEVCAPS_HWRASTERIZATION; pDeviceInfo->dwNumModes = 0; pDeviceInfo->ddDriverCaps = pDriverInfo->ddDriverCaps; pDeviceInfo->ddHELCaps = pDriverInfo->ddHELCaps;
上記のコードでは、D3DDEVICEINFO 構造体 pDeviceInfo にデバイス能力が格納される。pParentInfo は、ここからドライバの GUID および説明を取り出せるように D3DDEVICEINFO 型にキャストされることに注意する。
デバイス情報を取得できたので、デバイス情報を保持する D3DDEVICEINFO 構造体にデバイスのドライバ GUID および説明をコピーする。
pDeviceInfo->guidDriver = pDriverInfo->guidDriver; pDeviceInfo->pDriverGUID = &pDeviceInfo->guidDriver; strncpy( pDeviceInfo->strDesc, pDriverInfo->strDesc, 39 );
ディスプレイ ドライバ、ディスプレイ モード、およびデバイスを列挙したら、次はアプリケーションで使用するデバイスをこれらの中から選択する。これについては、「ステップ 2 : 列挙されたデバイスの選択」で説明する。