From: Emmanuele Bassi Date: Fri, 20 Jan 2017 18:07:01 +0000 (+0000) Subject: gdk/x11: Check if we have access to GL before using GLX API X-Git-Tag: archive/raspbian/3.22.17-1+rpi1~1^2~1 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=0bf9b92fefa7184dde77543845ea1a2e44b4800c;p=gtk%2B3.0.git gdk/x11: Check if we have access to GL before using GLX API If the platform does not have access to libGL then any call to GL and GLX API through libepoxy will fail with an assertion. Until such time that libepoxy exposes API for us to use, we can simply dlopen libGL ourselves and do a symbol check. [smcv: fix typo] Bug: https://bugzilla.gnome.org/show_bug.cgi?id=775279 Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=847366 Gbp-Pq: Name gdk-x11-Check-if-we-have-access-to-GL-before-using-G.patch --- diff --git a/gdk/x11/gdkglcontext-x11.c b/gdk/x11/gdkglcontext-x11.c index 0819f89648..d8ddf0fe19 100644 --- a/gdk/x11/gdkglcontext-x11.c +++ b/gdk/x11/gdkglcontext-x11.c @@ -854,6 +854,32 @@ gdk_x11_screen_init_gl (GdkScreen *screen) if (_gdk_gl_flags & GDK_GL_DISABLE) return FALSE; + /* This is an ad hoc check that bypasses libepoxy to check if libGL.so is + * unavailable, and disables GL support if that's the case + * + * Ideally, libepoxy should do this for us, but that would require adding + * new API, and we'd need a fallback anyway. + */ + { + Bool (* fp_glXQueryExtension) (Display *dpy, int *err_base, int *ev_base); + GModule *module = g_module_open ("libGL.so.1", 0); + + if (module == NULL) + { + GDK_NOTE (OPENGL, g_message ("No libGL.so found")); + return FALSE; + } + + if (!g_module_symbol (module, "glXQueryExtension", (gpointer *) &fp_glXQueryExtension)) + { + GDK_NOTE (OPENGL, g_message ("No glXQueryExtension symbol found")); + g_module_close (module); + return FALSE; + } + + g_module_close (module); + } + dpy = gdk_x11_display_get_xdisplay (display); if (!glXQueryExtension (dpy, &error_base, &event_base))