diff options
author | Frank Richter <[email protected]> | 2017-10-17 10:34:27 +0200 |
---|---|---|
committer | Brian Paul <[email protected]> | 2017-11-15 16:12:43 -0700 |
commit | bf41b2b2627aa3790d380092c28c5d3395cc9cde (patch) | |
tree | ca14546652377f8b1e9a59c745564a0605a95705 | |
parent | 824e8084ed557061cd7a008b08da15897277d66e (diff) |
gallium/wgl: fix default pixel format issue
When creating a context without SetPixelFormat() don't blindly take the
pixel format reported by GDI. Instead, look for our own closest pixel
format.
Minor clean-ups added by Brian Paul.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=103412
Reviewed-by: Brian Paul <[email protected]>
Tested-by: Brian Paul <[email protected]>
-rw-r--r-- | src/gallium/state_trackers/wgl/stw_context.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/src/gallium/state_trackers/wgl/stw_context.c b/src/gallium/state_trackers/wgl/stw_context.c index 58fe3b0b6e6..939ffd56832 100644 --- a/src/gallium/state_trackers/wgl/stw_context.c +++ b/src/gallium/state_trackers/wgl/stw_context.c @@ -133,6 +133,25 @@ DrvCreateLayerContext(HDC hdc, INT iLayerPlane) /** + * Return the stw pixel format that most closely matches the pixel format + * on HDC. + * Used to get a pixel format when SetPixelFormat() hasn't been called before. + */ +static int +get_matching_pixel_format(HDC hdc) +{ + int iPixelFormat = GetPixelFormat(hdc); + PIXELFORMATDESCRIPTOR pfd; + + if (!iPixelFormat) + return 0; + if (!DescribePixelFormat(hdc, iPixelFormat, sizeof(pfd), &pfd)) + return 0; + return stw_pixelformat_choose(hdc, &pfd); +} + + +/** * Called via DrvCreateContext(), DrvCreateLayerContext() and * wglCreateContextAttribsARB() to actually create a rendering context. * \param handle the desired DHGLRC handle to use for the context, or zero @@ -174,7 +193,7 @@ stw_create_context_attribs(HDC hdc, INT iLayerPlane, DHGLRC hShareContext, * but not all do, and the opengl32 runtime seems to use a default * pixel format in some cases, so use that. */ - iPixelFormat = GetPixelFormat(hdc); + iPixelFormat = get_matching_pixel_format(hdc); if (!iPixelFormat) return 0; } @@ -458,7 +477,7 @@ stw_make_current(HDC hDrawDC, HDC hReadDC, DHGLRC dhglrc) * pixel format in some cases, so we must create a framebuffer for * those here. */ - int iPixelFormat = GetPixelFormat(hDrawDC); + int iPixelFormat = get_matching_pixel_format(hDrawDC); if (iPixelFormat) fb = stw_framebuffer_create( hDrawDC, iPixelFormat ); if (!fb) |