mirror of
https://github.com/isledecomp/isle-portable.git
synced 2025-04-27 23:03:35 -04:00
MxDirect3D::SetDevice to 100% (#1396)
This commit is contained in:
parent
92f20e7f7b
commit
8b7182f9db
1 changed files with 35 additions and 42 deletions
|
@ -1,5 +1,7 @@
|
|||
#include "mxdirect3d.h"
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
DECOMP_SIZE_ASSERT(MxDirect3D, 0x894)
|
||||
|
||||
#if !defined(MXDIRECTX_FOR_CONFIG)
|
||||
|
@ -234,81 +236,72 @@ BOOL MxDirect3D::SetDevice(MxDeviceEnumerate& p_deviceEnumerate, MxDriver* p_dri
|
|||
m_pCurrentDeviceModesList = NULL;
|
||||
}
|
||||
|
||||
MxAssignedDevice* assignedDevice = new MxAssignedDevice;
|
||||
MxAssignedDevice* d = new MxAssignedDevice;
|
||||
assert(d);
|
||||
int i = 0;
|
||||
|
||||
for (list<MxDriver>::iterator it = p_deviceEnumerate.m_list.begin(); it != p_deviceEnumerate.m_list.end(); it++) {
|
||||
for (list<MxDriver>::iterator it = p_deviceEnumerate.m_list.begin(); it != p_deviceEnumerate.m_list.end();
|
||||
it++, i++) {
|
||||
MxDriver& driver = *it;
|
||||
|
||||
if (&driver == p_driver) {
|
||||
assignedDevice->m_deviceInfo = new DeviceModesInfo;
|
||||
d->m_deviceInfo = new DeviceModesInfo;
|
||||
|
||||
if (driver.m_guid) {
|
||||
assignedDevice->m_deviceInfo->m_guid = new GUID;
|
||||
memcpy(assignedDevice->m_deviceInfo->m_guid, driver.m_guid, sizeof(GUID));
|
||||
d->m_deviceInfo->m_guid = new GUID;
|
||||
*d->m_deviceInfo->m_guid = *driver.m_guid;
|
||||
}
|
||||
|
||||
assignedDevice->m_deviceInfo->m_count = driver.m_displayModes.size();
|
||||
|
||||
if (assignedDevice->m_deviceInfo->m_count > 0) {
|
||||
assignedDevice->m_deviceInfo->m_modeArray =
|
||||
new DeviceModesInfo::Mode[assignedDevice->m_deviceInfo->m_count];
|
||||
d->m_deviceInfo->m_count = driver.m_displayModes.size();
|
||||
|
||||
if (d->m_deviceInfo->m_count > 0) {
|
||||
int j = 0;
|
||||
d->m_deviceInfo->m_modeArray = new DeviceModesInfo::Mode[d->m_deviceInfo->m_count];
|
||||
|
||||
for (list<MxDisplayMode>::iterator it2 = driver.m_displayModes.begin();
|
||||
it2 != driver.m_displayModes.end();
|
||||
it2++) {
|
||||
assignedDevice->m_deviceInfo->m_modeArray[j].width = (*it2).m_width;
|
||||
assignedDevice->m_deviceInfo->m_modeArray[j].height = (*it2).m_height;
|
||||
assignedDevice->m_deviceInfo->m_modeArray[j].bitsPerPixel = (*it2).m_bitsPerPixel;
|
||||
j++;
|
||||
it2++, j++) {
|
||||
d->m_deviceInfo->m_modeArray[j].width = (*it2).m_width;
|
||||
d->m_deviceInfo->m_modeArray[j].height = (*it2).m_height;
|
||||
d->m_deviceInfo->m_modeArray[j].bitsPerPixel = (*it2).m_bitsPerPixel;
|
||||
}
|
||||
}
|
||||
|
||||
memcpy(
|
||||
&assignedDevice->m_deviceInfo->m_ddcaps,
|
||||
&driver.m_ddCaps,
|
||||
sizeof(assignedDevice->m_deviceInfo->m_ddcaps)
|
||||
);
|
||||
d->m_deviceInfo->m_ddcaps = driver.m_ddCaps;
|
||||
|
||||
if (i == 0) {
|
||||
assignedDevice->m_flags |= MxAssignedDevice::c_primaryDevice;
|
||||
d->m_flags |= MxAssignedDevice::c_primaryDevice;
|
||||
}
|
||||
|
||||
for (list<Direct3DDeviceInfo>::iterator it2 = driver.m_devices.begin(); it2 != driver.m_devices.end();
|
||||
it2++) {
|
||||
Direct3DDeviceInfo& device = *it2;
|
||||
if (&device != p_device) {
|
||||
continue;
|
||||
}
|
||||
if (&device == p_device) {
|
||||
memcpy(&d->m_guid, device.m_guid, sizeof(d->m_guid));
|
||||
|
||||
memcpy(&assignedDevice->m_guid, device.m_guid, sizeof(assignedDevice->m_guid));
|
||||
if (device.m_HWDesc.dcmColorModel) {
|
||||
d->m_flags |= MxAssignedDevice::c_hardwareMode;
|
||||
d->m_desc = device.m_HWDesc;
|
||||
}
|
||||
else {
|
||||
d->m_desc = device.m_HELDesc;
|
||||
}
|
||||
|
||||
D3DDEVICEDESC* desc;
|
||||
if (device.m_HWDesc.dcmColorModel) {
|
||||
assignedDevice->m_flags |= MxAssignedDevice::c_hardwareMode;
|
||||
desc = &device.m_HWDesc;
|
||||
m_assignedDevice = d;
|
||||
m_pCurrentDeviceModesList = d->m_deviceInfo;
|
||||
break;
|
||||
}
|
||||
else {
|
||||
desc = &device.m_HELDesc;
|
||||
}
|
||||
|
||||
memcpy(&assignedDevice->m_desc, desc, sizeof(assignedDevice->m_desc));
|
||||
m_assignedDevice = assignedDevice;
|
||||
m_pCurrentDeviceModesList = assignedDevice->m_deviceInfo;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
i++;
|
||||
}
|
||||
|
||||
if (!m_assignedDevice) {
|
||||
delete assignedDevice;
|
||||
delete d;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
else {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue