From 65303d85902481c4a4d1fdcc3e97ad124a287fdc Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 15 Aug 2017 17:11:09 +0100 Subject: [PATCH] Don't use RTLD_NEXT, use libGLdlsymHandle which is more accurate * The value is initialised to RTLD_NEXT, but if we get a real lib handle then we should prefer to use that. --- renderdoc/driver/gl/gl_hooks_linux.cpp | 29 +++++++++++++------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/renderdoc/driver/gl/gl_hooks_linux.cpp b/renderdoc/driver/gl/gl_hooks_linux.cpp index ba8acef33..9f6ad4fa9 100644 --- a/renderdoc/driver/gl/gl_hooks_linux.cpp +++ b/renderdoc/driver/gl/gl_hooks_linux.cpp @@ -153,9 +153,10 @@ public: }; bool is_direct = false; - PFNGLXISDIRECTPROC glXIsDirectProc = (PFNGLXISDIRECTPROC)dlsym(RTLD_NEXT, "glXIsDirect"); + PFNGLXISDIRECTPROC glXIsDirectProc = + (PFNGLXISDIRECTPROC)dlsym(libGLdlsymHandle, "glXIsDirect"); PFNGLXCREATEPBUFFERPROC glXCreatePbufferProc = - (PFNGLXCREATEPBUFFERPROC)dlsym(RTLD_NEXT, "glXCreatePbuffer"); + (PFNGLXCREATEPBUFFERPROC)dlsym(libGLdlsymHandle, "glXCreatePbuffer"); if(glXIsDirectProc) is_direct = glXIsDirectProc(share.dpy, share.ctx); @@ -187,7 +188,7 @@ public: void DeleteContext(GLWindowingData context) { PFNGLXDESTROYPBUFFERPROC glXDestroyPbufferProc = - (PFNGLXDESTROYPBUFFERPROC)dlsym(RTLD_NEXT, "glXDestroyPbuffer"); + (PFNGLXDESTROYPBUFFERPROC)dlsym(libGLdlsymHandle, "glXDestroyPbuffer"); if(context.wnd && glXDestroyPbufferProc) glXDestroyPbufferProc(context.dpy, context.wnd); @@ -421,7 +422,7 @@ public: glXChooseFBConfig_real = (PFNGLXCHOOSEFBCONFIGPROC)dlsym(libGLdlsymHandle, "glXChooseFBConfig"); if(glXQueryDrawable_real == NULL) - glXQueryDrawable_real = (PFNGLXQUERYDRAWABLEPROC)dlsym(RTLD_NEXT, "glXQueryDrawable"); + glXQueryDrawable_real = (PFNGLXQUERYDRAWABLEPROC)dlsym(libGLdlsymHandle, "glXQueryDrawable"); // glXCreateContextAttribsARB may not be directly exported by libGL.so, so try to fetch it // through the glXGetProcAddress function, favouring the ARB variant. @@ -838,34 +839,34 @@ bool OpenGLHook::DrawQuads(float width, float height, const std::vector & { if(!immediateInited) { - getInt = (GLGETINTEGERVPROC)dlsym(RTLD_NEXT, "glGetIntegerv"); + getInt = (GLGETINTEGERVPROC)dlsym(libGLdlsymHandle, "glGetIntegerv"); if(!getInt) return false; - pushm = (GLPUSHMATRIXPROC)dlsym(RTLD_NEXT, "glPushMatrix"); + pushm = (GLPUSHMATRIXPROC)dlsym(libGLdlsymHandle, "glPushMatrix"); if(!pushm) return false; - loadident = (GLLOADIDENTITYPROC)dlsym(RTLD_NEXT, "glLoadIdentity"); + loadident = (GLLOADIDENTITYPROC)dlsym(libGLdlsymHandle, "glLoadIdentity"); if(!loadident) return false; - matMode = (GLMATRIXMODEPROC)dlsym(RTLD_NEXT, "glMatrixMode"); + matMode = (GLMATRIXMODEPROC)dlsym(libGLdlsymHandle, "glMatrixMode"); if(!matMode) return false; - ortho = (GLORTHOPROC)dlsym(RTLD_NEXT, "glOrtho"); + ortho = (GLORTHOPROC)dlsym(libGLdlsymHandle, "glOrtho"); if(!ortho) return false; - popm = (GLPOPMATRIXPROC)dlsym(RTLD_NEXT, "glPopMatrix"); + popm = (GLPOPMATRIXPROC)dlsym(libGLdlsymHandle, "glPopMatrix"); if(!popm) return false; - begin = (GLBEGINPROC)dlsym(RTLD_NEXT, "glBegin"); + begin = (GLBEGINPROC)dlsym(libGLdlsymHandle, "glBegin"); if(!begin) return false; - v2f = (GLVERTEX2FPROC)dlsym(RTLD_NEXT, "glVertex2f"); + v2f = (GLVERTEX2FPROC)dlsym(libGLdlsymHandle, "glVertex2f"); if(!v2f) return false; - t2f = (GLTEXCOORD2FPROC)dlsym(RTLD_NEXT, "glTexCoord2f"); + t2f = (GLTEXCOORD2FPROC)dlsym(libGLdlsymHandle, "glTexCoord2f"); if(!t2f) return false; - end = (GLENDPROC)dlsym(RTLD_NEXT, "glEnd"); + end = (GLENDPROC)dlsym(libGLdlsymHandle, "glEnd"); if(!end) return false;