#include DeviceEnumerator::DeviceEnumerator(void) { } DeviceEnumerator::DeviceEnumerator(const DeviceEnumerator &someDeviceEnumerator) { // private implementation *this=someDeviceEnumerator; } DeviceEnumerator::~DeviceEnumerator() { } DeviceEnumerator &DeviceEnumerator::operator=(const DeviceEnumerator &/*someDeviceEnumerator*/) { // private implementation return *this; } Block &DeviceEnumerator::enumeratedDevices(void) { return mEnumeratedDevices; } HRESULT WINAPI DeviceEnumerator::enumDeviceCallback(LPGUID lpGUID,LPSTR lpszDeviceDesc,LPSTR lpszDeviceName,LPD3DDEVICEDESC lpd3dHWDeviceDesc,LPD3DDEVICEDESC lpd3dSWDeviceDesc,LPVOID lpUserArg) { DeviceEnumerator &deviceEnumerator=(*(DeviceEnumerator*)lpUserArg); DeviceDescription deviceDescription; deviceDescription.guid(*lpGUID); deviceDescription.deviceName(lpszDeviceName); deviceDescription.deviceDescription(lpszDeviceDesc); deviceDescription.hwDeviceDescription(*lpd3dHWDeviceDesc); deviceDescription.swDeviceDescription(*lpd3dSWDeviceDesc); deviceEnumerator.mEnumeratedDevices.insert(&deviceDescription); DeviceDescription &currDeviceDescription=deviceEnumerator.mEnumeratedDevices[deviceEnumerator.mEnumeratedDevices.size()-1]; deviceEnumerator.enumDevice(currDeviceDescription); if(currDeviceDescription.selected())return D3DENUMRET_CANCEL; return D3DENUMRET_OK; } // virtuals void DeviceEnumerator::enumDevice(DeviceDescription &deviceDescription) { const D3DDEVICEDESC &swhwDeviceDescription=deviceDescription.isHardware()?deviceDescription.hwDeviceDescription():deviceDescription.swDeviceDescription(); if(deviceDescription.isHardware()) { deviceDescription.selected(TRUE); return; } if(!(swhwDeviceDescription.dwDeviceRenderBitDepth&PreferredDeviceBitDepth))return; if(D3DCOLOR_MONO==swhwDeviceDescription.dcmColorModel) { if(!(swhwDeviceDescription.dpcTriCaps.dwShadeCaps&D3DPSHADECAPS_COLORGOURAUDMONO))return; } else { if(!(swhwDeviceDescription.dpcTriCaps.dwShadeCaps&D3DPSHADECAPS_COLORGOURAUDRGB))return; } return; }