Browse Source

windisplay: Add debug prints listing display devices and monitors

rdb 3 years ago
parent
commit
aab149e75a
1 changed files with 65 additions and 0 deletions
  1. 65 0
      panda/src/windisplay/winGraphicsPipe.cxx

+ 65 - 0
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
 #ifdef HAVE_DX9
   // Use D3D to get display info.  This is disabled by default as it is slow.
   // Use D3D to get display info.  This is disabled by default as it is slow.
   if (request_dxdisplay_information) {
   if (request_dxdisplay_information) {