forked from AuroraMiddleware/gtk
gdkglcontext-win32.c: Fix running with Mesa drivers
Some GL drivers such as Mesa-D3D12 do not allow one to call SetPixelFormat() on a given HDC if one pixel format has been already set for it, so first check the HDC with GetPixelFormat() to see whether a pixel format has already been set with the HDC, and only attempt to acquire the pixel format if one has not been set. This will fix running with GL/NGL on Windows using the Mesa drivers.
This commit is contained in:
parent
604d171d56
commit
66e7f3b404
@ -712,20 +712,30 @@ _set_pixformat_for_hdc (HDC hdc,
|
|||||||
int *best_idx,
|
int *best_idx,
|
||||||
GdkWin32Display *display)
|
GdkWin32Display *display)
|
||||||
{
|
{
|
||||||
PIXELFORMATDESCRIPTOR pfd;
|
gboolean already_checked = TRUE;
|
||||||
gboolean set_pixel_format_result = FALSE;
|
*best_idx = GetPixelFormat (hdc);
|
||||||
|
|
||||||
/* one is only allowed to call SetPixelFormat(), and so ChoosePixelFormat()
|
/* one is only allowed to call SetPixelFormat(), and so ChoosePixelFormat()
|
||||||
* one single time per window HDC
|
* one single time per window HDC
|
||||||
*/
|
*/
|
||||||
*best_idx = _get_wgl_pfd (hdc, &pfd, display);
|
if (*best_idx == 0)
|
||||||
|
{
|
||||||
|
PIXELFORMATDESCRIPTOR pfd;
|
||||||
|
gboolean set_pixel_format_result = FALSE;
|
||||||
|
|
||||||
if (*best_idx != 0)
|
GDK_NOTE (OPENGL, g_print ("requesting pixel format...\n"));
|
||||||
set_pixel_format_result = SetPixelFormat (hdc, *best_idx, &pfd);
|
already_checked = FALSE;
|
||||||
|
*best_idx = _get_wgl_pfd (hdc, &pfd, display);
|
||||||
|
|
||||||
/* ChoosePixelFormat() or SetPixelFormat() failed, bail out */
|
if (*best_idx != 0)
|
||||||
if (*best_idx == 0 || !set_pixel_format_result)
|
set_pixel_format_result = SetPixelFormat (hdc, *best_idx, &pfd);
|
||||||
return FALSE;
|
|
||||||
|
/* ChoosePixelFormat() or SetPixelFormat() failed, bail out */
|
||||||
|
if (*best_idx == 0 || !set_pixel_format_result)
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
GDK_NOTE (OPENGL, g_print ("%s""requested and set pixel format: %d\n", already_checked ? "already " : "", *best_idx));
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user