Make Win32 video mode enumeration faster

master
Camilla Berglund ago%!(EXTRA string=10 years)
parent 3dc53e21e5
commit 842aeb8c47
  1. 25
      src/win32_monitor.c
  2. 1
      src/win32_platform.h

@ -152,6 +152,9 @@ _GLFWmonitor** _glfwPlatformGetMonitors(int* count)
DeleteDC(dc);
free(name);
if (adapter.StateFlags & DISPLAY_DEVICE_MODESPRUNED)
monitor->win32.modesPruned = GL_TRUE;
wcscpy(monitor->win32.adapterName, adapter.DeviceName);
wcscpy(monitor->win32.displayName, display.DeviceName);
@ -226,15 +229,6 @@ GLFWvidmode* _glfwPlatformGetVideoModes(_GLFWmonitor* monitor, int* count)
modeIndex++;
if (ChangeDisplaySettingsExW(monitor->win32.adapterName,
&dm,
NULL,
CDS_TEST,
NULL) != DISP_CHANGE_SUCCESSFUL)
{
continue;
}
// Skip modes with less than 15 BPP
if (dm.dmBitsPerPel < 15)
continue;
@ -257,6 +251,19 @@ GLFWvidmode* _glfwPlatformGetVideoModes(_GLFWmonitor* monitor, int* count)
if (i < *count)
continue;
if (monitor->win32.modesPruned)
{
// Skip modes not supported by the connected displays
if (ChangeDisplaySettingsExW(monitor->win32.adapterName,
&dm,
NULL,
CDS_TEST,
NULL) != DISP_CHANGE_SUCCESSFUL)
{
continue;
}
}
if (*count == size)
{
if (*count)

@ -203,6 +203,7 @@ typedef struct _GLFWmonitorWin32
WCHAR displayName[32];
char publicAdapterName[64];
char publicDisplayName[64];
GLboolean modesPruned;
GLboolean modeChanged;
} _GLFWmonitorWin32;

Loading…
Cancel
Save