Skip to content
Snippets Groups Projects
Commit bf41b2b2 authored by Frank Richter's avatar Frank Richter Committed by Brian Paul
Browse files

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: default avatarBrian Paul <brianp@vmware.com>
Tested-by: default avatarBrian Paul <brianp@vmware.com>
parent 824e8084
No related branches found
No related tags found
No related merge requests found
......@@ -132,6 +132,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.
......@@ -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)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment