From: Benjamin Otte Date: Sat, 3 Jun 2023 16:00:56 +0000 (+0200) Subject: glx: Trap errors inside loop X-Git-Tag: archive/raspbian/4.12.3+ds-1+rpi1~1^2^2^2~22^2~1^2~189^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=0016fea36bf4b7e95726c064f1248385a75c6517;p=gtk4.git glx: Trap errors inside loop Instead of trapping errors for the whole loop trying to create GL contexts, trap them once per GL context. Apparently GLX does throw an error when a too high version is requested and doesn't just return NULL and then that error lingers when we try lower versions. Fixes #5857 --- diff --git a/gdk/x11/gdkglcontext-glx.c b/gdk/x11/gdkglcontext-glx.c index 7ad18e4307..89571643eb 100644 --- a/gdk/x11/gdkglcontext-glx.c +++ b/gdk/x11/gdkglcontext-glx.c @@ -543,14 +543,14 @@ gdk_x11_context_create_glx_context (GdkGLContext *context, if (share != NULL) share_glx = GDK_X11_GL_CONTEXT_GLX (share); - gdk_x11_display_error_trap_push (display); - supported_versions = gdk_gl_versions_get_for_api (api); for (j = 0; gdk_gl_version_greater_equal (&supported_versions[j], &version); j++) { context_attribs [major_idx] = gdk_gl_version_get_major (&supported_versions[j]); context_attribs [minor_idx] = gdk_gl_version_get_minor (&supported_versions[j]); + gdk_x11_display_error_trap_push (display); + /* If we don't have access to GLX_ARB_create_context_profile, then * we have to fall back to the old GLX 1.3 API. */ @@ -568,22 +568,19 @@ gdk_x11_context_create_glx_context (GdkGLContext *context, True, context_attribs); - if (ctx) + if (ctx == NULL) + { + gdk_x11_display_error_trap_pop_ignored (display); + } + else if (gdk_x11_display_error_trap_pop (display)) + { + glXDestroyContext (dpy, ctx); + ctx = NULL; + } + else break; } - if (ctx == NULL) - { - gdk_x11_display_error_trap_pop_ignored (display); - return 0; - } - - if (gdk_x11_display_error_trap_pop (display)) - { - glXDestroyContext (dpy, ctx); - return 0; - } - GDK_DISPLAY_DEBUG (display, OPENGL, "Realized GLX context[%p], %s, version: %d.%d", context_glx->glx_context,