Platform SDK: DirectX

ステップ 1.3 : デバイス情報を列挙する

[Visual Basic]

ここでは、C および C++ でのアプリケーション開発について説明する。Visual Basic については、「Direct3D 直接モード Visual Basic チュートリアル」を参照すること。

[C++]

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 : 列挙されたデバイスの選択」で説明する。