Enumeration Function

The ChooseDevice function invokes the EnumDeviceCallback function , which is described in Enumeration Callback Function.

static HRESULT

ChooseDevice(void)

{

DDSURFACEDESC ddsd;

HRESULT hRes;

ASSERT(NULL != lpd3d);

ASSERT(NULL != lpddPrimary);

// Since we are running in a window, we will not be changing the

// screen depth; therefore, the pixel format of the rendering

// target must match the pixel format of the current primary

// surface. This means that we need to determine the pixel

// format of the primary surface.

ZeroMemory(&ddsd, sizeof(ddsd));

ddsd.dwSize = sizeof(ddsd);

hRes = lpddPrimary->lpVtbl->GetSurfaceDesc(lpddPrimary, &ddsd);

if (FAILED(hRes))

return hRes;

dwDeviceBitDepth =

BitDepthToFlags(ddsd.ddpfPixelFormat.dwRGBBitCount);

// Enumerate the devices and pick one.

fDeviceFound = FALSE;

hRes = lpd3d->lpVtbl->EnumDevices(lpd3d, EnumDeviceCallback,

&fDeviceFound);

if (FAILED(hRes))

return hRes;

if (!fDeviceFound)

{

// No suitable device was found. We cannot allow

// device-creation to continue.

return DDERR_NOTFOUND;

}

return DD_OK;

}