diff --git a/panda/src/windisplay/winGraphicsPipe.cxx b/panda/src/windisplay/winGraphicsPipe.cxx index b89d022ca8..eb29048c65 100644 --- a/panda/src/windisplay/winGraphicsPipe.cxx +++ b/panda/src/windisplay/winGraphicsPipe.cxx @@ -259,6 +259,71 @@ WinGraphicsPipe() { } } + if (windisplay_cat.is_debug()) { + windisplay_cat.debug() + << "Detected display devices:\n"; + + DISPLAY_DEVICEA device; + device.cb = sizeof(device); + for (DWORD devnum = 0; EnumDisplayDevicesA(nullptr, devnum, &device, 0); ++devnum) { + std::ostream &out = windisplay_cat.debug(); + out << " " << device.DeviceName << " [" << device.DeviceString << "]"; + if (device.StateFlags & DISPLAY_DEVICE_ACTIVE) { + out << " (active)"; + } + if (device.StateFlags & DISPLAY_DEVICE_MULTI_DRIVER) { + out << " (multi-driver)"; + } + if (device.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE) { + out << " (primary)"; + } + if (device.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER) { + out << " (mirroring)"; + } + if (device.StateFlags & DISPLAY_DEVICE_REMOVABLE) { + out << " (removable)"; + } + out << "\n"; + } + + int nmonitor = GetSystemMetrics(SM_CMONITORS); + windisplay_cat.debug() + << "Detected " << nmonitor << " monitors, " + << (GetSystemMetrics(SM_SAMEDISPLAYFORMAT) != 0 ? "" : "NOT ") + << "sharing same display format:\n"; + + EnumDisplayMonitors( + nullptr, + nullptr, + [](HMONITOR monitor, HDC dc, LPRECT rect, LPARAM param) -> BOOL { + MONITORINFOEXA info; + info.cbSize = sizeof(info); + if (GetMonitorInfoA(monitor, &info)) { + std::ostream &out = windisplay_cat.debug() << " "; + + DISPLAY_DEVICEA device; + device.cb = sizeof(device); + device.StateFlags = 0; + if (EnumDisplayDevicesA(info.szDevice, 0, &device, 0)) { + out << device.DeviceName << " [" << device.DeviceString << "]"; + } + else { + out << info.szDevice << " (device enum failed)"; + } + + if (info.dwFlags & MONITORINFOF_PRIMARY) { + out << " (primary)"; + } + if (info.rcWork.left != 0 || info.rcWork.top != 0) { + out << " (at " << info.rcWork.left << "x" << info.rcWork.top << ")"; + } + out << "\n"; + } + return TRUE; + }, + 0); + } + #ifdef HAVE_DX9 // Use D3D to get display info. This is disabled by default as it is slow. if (request_dxdisplay_information) {