diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 9ba21abd..684850f7 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -45,6 +45,7 @@ video tutorials. - Bailey Cosier - Noel Cower - CuriouserThing + - Bill Currie - Jason Daly - danhambleton - Jarrod Davis @@ -162,6 +163,7 @@ video tutorials. - Martins Mozeiko - James Murphy - Julian Møller + - NateIsStalling - ndogxj - F. Nedelec - Kristian Nielsen diff --git a/README.md b/README.md index 49320508..9595a4db 100644 --- a/README.md +++ b/README.md @@ -128,6 +128,7 @@ information on what to include when reporting a bug. - [Wayland] Bugfix: Terminating the library before showing a window could segfault - [Wayland] Bugfix: Compilation failed on FreeBSD (#2445) - [Linux] Bugfix: `regfree´ was called on invalid data (#2464) + - [WGL] Bugfix: Context creation failed in Parallels VM (#2191,#2406,#2467) ## Contact diff --git a/src/wgl_context.c b/src/wgl_context.c index eebf6cd5..b245b292 100644 --- a/src/wgl_context.c +++ b/src/wgl_context.c @@ -80,6 +80,23 @@ static int choosePixelFormat(_GLFWwindow* window, if (_glfw.wgl.ARB_pixel_format) { + // NOTE: In a Parallels VM WGL_ARB_pixel_format returns fewer pixel formats than + // DescribePixelFormat, violating the guarantees of the extension spec + // HACK: Iterate through the minimum of both counts + + const int attrib = WGL_NUMBER_PIXEL_FORMATS_ARB; + int extensionCount; + + if (!wglGetPixelFormatAttribivARB(window->context.wgl.dc, + 1, 0, 1, &attrib, &extensionCount)) + { + _glfwInputErrorWin32(GLFW_PLATFORM_ERROR, + "WGL: Failed to retrieve pixel format attribute"); + return 0; + } + + nativeCount = _glfw_min(nativeCount, extensionCount); + addAttrib(WGL_SUPPORT_OPENGL_ARB); addAttrib(WGL_DRAW_TO_WINDOW_ARB); addAttrib(WGL_PIXEL_TYPE_ARB);