From d81dc7936a8d7985aec4e710576ead48e567d29e Mon Sep 17 00:00:00 2001 From: jackun Date: Fri, 10 Apr 2020 22:36:35 +0300 Subject: [PATCH] [OpenGL] Use glXQueryDrawable if XGetGeometry fails --- src/gl/inject_glx.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/gl/inject_glx.cpp b/src/gl/inject_glx.cpp index be8e1eb6..216ef92e 100644 --- a/src/gl/inject_glx.cpp +++ b/src/gl/inject_glx.cpp @@ -21,6 +21,11 @@ using namespace MangoHud::GL; EXPORT_C_(void *) glXGetProcAddress(const unsigned char* procName); EXPORT_C_(void *) glXGetProcAddressARB(const unsigned char* procName); +#ifndef GLX_WIDTH +#define GLX_WIDTH 0x801D +#define GLX_HEIGTH 0x801E +#endif + static glx_loader glx; void* get_glx_proc_address(const char* name) { @@ -79,17 +84,22 @@ EXPORT_C_(void) glXSwapBuffers(void* dpy, void* drawable) { glx.Load(); VARIANT(imgui_create)(glx.GetCurrentContext()); - unsigned int width, height; - //glx.QueryDrawable(dpy, drawable, 0x801D /*GLX_WIDTH*/, &width); - //glx.QueryDrawable(dpy, drawable, 0x801E /*GLX_HEIGTH*/, &height); + unsigned int width = -1, height = -1; // glXQueryDrawable is buggy, use XGetGeometry instead Window unused_window; int unused; - g_x11->XGetGeometry((Display*)dpy, (Window)drawable, &unused_window, + static bool xgetgeom_failed = false; + if (xgetgeom_failed || !g_x11->XGetGeometry((Display*)dpy, + (Window)drawable, &unused_window, &unused, &unused, &width, &height, - (unsigned int*) &unused, (unsigned int*) &unused); + (unsigned int*) &unused, (unsigned int*) &unused)) { + + xgetgeom_failed = true; + glx.QueryDrawable(dpy, drawable, GLX_WIDTH, &width); + glx.QueryDrawable(dpy, drawable, GLX_HEIGTH, &height); + } /*GLint vp[4]; glGetIntegerv (GL_VIEWPORT, vp); width = vp[2];