mirror of
https://github.com/glfw/glfw.git
synced 2024-12-01 06:17:10 +00:00
WGL: Fix pixel format count in a Parallels VM
In a Parallels VM wglGetPixelFormatAttribivARB returns fewer pixel formats than DescribePixelFormat. This broke context creation on Windows in Parallels since the changes in2c0f34b60f
. The previous version of the code worked accidentally. This adds a workaround by iterating through the minimum of both counts. It should have no effect when running on conforming implementations. Tested on Parallels by @ dougbinks. Closes #2191 Fixes #2406 Fixes #2467 This was adapted to 3.3-stable from00e86d4b73
.
This commit is contained in:
parent
ae44e10b33
commit
bc788a9333
@ -45,6 +45,7 @@ video tutorials.
|
|||||||
- Bailey Cosier
|
- Bailey Cosier
|
||||||
- Noel Cower
|
- Noel Cower
|
||||||
- CuriouserThing
|
- CuriouserThing
|
||||||
|
- Bill Currie
|
||||||
- Jason Daly
|
- Jason Daly
|
||||||
- danhambleton
|
- danhambleton
|
||||||
- Jarrod Davis
|
- Jarrod Davis
|
||||||
@ -162,6 +163,7 @@ video tutorials.
|
|||||||
- Martins Mozeiko
|
- Martins Mozeiko
|
||||||
- James Murphy
|
- James Murphy
|
||||||
- Julian Møller
|
- Julian Møller
|
||||||
|
- NateIsStalling
|
||||||
- ndogxj
|
- ndogxj
|
||||||
- F. Nedelec
|
- F. Nedelec
|
||||||
- Kristian Nielsen
|
- Kristian Nielsen
|
||||||
|
@ -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: Terminating the library before showing a window could segfault
|
||||||
- [Wayland] Bugfix: Compilation failed on FreeBSD (#2445)
|
- [Wayland] Bugfix: Compilation failed on FreeBSD (#2445)
|
||||||
- [Linux] Bugfix: `regfree´ was called on invalid data (#2464)
|
- [Linux] Bugfix: `regfree´ was called on invalid data (#2464)
|
||||||
|
- [WGL] Bugfix: Context creation failed in Parallels VM (#2191,#2406,#2467)
|
||||||
|
|
||||||
|
|
||||||
## Contact
|
## Contact
|
||||||
|
@ -80,6 +80,23 @@ static int choosePixelFormat(_GLFWwindow* window,
|
|||||||
|
|
||||||
if (_glfw.wgl.ARB_pixel_format)
|
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_SUPPORT_OPENGL_ARB);
|
||||||
addAttrib(WGL_DRAW_TO_WINDOW_ARB);
|
addAttrib(WGL_DRAW_TO_WINDOW_ARB);
|
||||||
addAttrib(WGL_PIXEL_TYPE_ARB);
|
addAttrib(WGL_PIXEL_TYPE_ARB);
|
||||||
|
Loading…
Reference in New Issue
Block a user