Files
Work/ddraw/DEVENUM.CPP
2024-08-07 09:16:27 -04:00

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;
}