64 lines
2.0 KiB
C++
64 lines
2.0 KiB
C++
#include <ddraw/devenum.hpp>
|
|
|
|
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<DeviceDescription> &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;
|
|
}
|