|
@@ -326,7 +326,7 @@ void _glfwPlatformGetMonitorPos(_GLFWmonitor* monitor, int* xpos, int* ypos)
|
|
|
GLFWvidmode* _glfwPlatformGetVideoModes(_GLFWmonitor* monitor, int* found)
|
|
|
{
|
|
|
CFArrayRef modes;
|
|
|
- CFIndex count, i;
|
|
|
+ CFIndex count, i, j;
|
|
|
GLFWvidmode* result;
|
|
|
CVDisplayLinkRef link;
|
|
|
|
|
@@ -340,12 +340,26 @@ GLFWvidmode* _glfwPlatformGetVideoModes(_GLFWmonitor* monitor, int* found)
|
|
|
|
|
|
for (i = 0; i < count; i++)
|
|
|
{
|
|
|
- CGDisplayModeRef mode = (CGDisplayModeRef) CFArrayGetValueAtIndex(modes, i);
|
|
|
- if (modeIsGood(mode))
|
|
|
+ CGDisplayModeRef dm = (CGDisplayModeRef) CFArrayGetValueAtIndex(modes, i);
|
|
|
+ if (!modeIsGood(dm))
|
|
|
+ continue;
|
|
|
+
|
|
|
+ const GLFWvidmode mode = vidmodeFromCGDisplayMode(dm, link);
|
|
|
+
|
|
|
+ for (j = 0; j < *found; j++)
|
|
|
{
|
|
|
- result[*found] = vidmodeFromCGDisplayMode(mode, link);
|
|
|
- (*found)++;
|
|
|
+ if (_glfwCompareVideoModes(result + j, &mode) == 0)
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (i < *found)
|
|
|
+ {
|
|
|
+ // This is a duplicate, so skip it
|
|
|
+ continue;
|
|
|
}
|
|
|
+
|
|
|
+ result[*found] = mode;
|
|
|
+ (*found)++;
|
|
|
}
|
|
|
|
|
|
CFRelease(modes);
|