diff options
author | wm4 <wm4@nowhere> | 2014-05-31 21:53:04 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2014-05-31 21:53:04 +0200 |
commit | 8178b80748e79b2aac9cb712a82c949cb34b1e6d (patch) | |
tree | bd4b6482ad0f5d6ba0a3e3baa2ab23f512a588f0 /video/out/gl_x11.c | |
parent | 9f6e8d64de18d6bc57ee3338d6b900d669f35c0b (diff) | |
download | mpv-8178b80748e79b2aac9cb712a82c949cb34b1e6d.tar.bz2 mpv-8178b80748e79b2aac9cb712a82c949cb34b1e6d.tar.xz |
gl_x11: always require some GLX API functions, avoid dlsym()
The functions glXGetProcAddressARB() and glXQueryExtensionsString() were
loaded using dlsym(). This could fail when compiling to libmpv, because
then dlopen(NULL, ...) will look in the main program's list of
libraries, and the libGL linked to libmpv is never considered. (Don't
know if this somehow could be worked around.) The result is that using
vo_opengl with libmpv can fail.
Avoid this by not using dlsym(). glXGetProcAddressARB() was already used
directly in the same file, and that never caused any problems. (Still
add it to the configure test.) glXQueryExtensionsString() is documented
as added in GLX 1.1 - that's ancient.
Diffstat (limited to 'video/out/gl_x11.c')
-rw-r--r-- | video/out/gl_x11.c | 22 |
1 files changed, 5 insertions, 17 deletions
diff --git a/video/out/gl_x11.c b/video/out/gl_x11.c index a3733dea3a..78dfd8fbff 100644 --- a/video/out/gl_x11.c +++ b/video/out/gl_x11.c @@ -62,18 +62,9 @@ static bool create_context_x11_old(struct MPGLContext *ctx) return false; } - void *(*getProcAddress)(const GLubyte *); - getProcAddress = mp_getdladdr("glXGetProcAddress"); - if (!getProcAddress) - getProcAddress = mp_getdladdr("glXGetProcAddressARB"); - - const char *glxstr = ""; - const char *(*glXExtStr)(Display *, int) - = mp_getdladdr("glXQueryExtensionsString"); - if (glXExtStr) - glxstr = glXExtStr(display, ctx->vo->x11->screen); - - mpgl_load_functions(gl, getProcAddress, glxstr, vo->log); + const char *glxstr = glXQueryExtensionsString(display, ctx->vo->x11->screen); + + mpgl_load_functions(gl, (void *)glXGetProcAddressARB, glxstr, vo->log); if (!gl->GenPrograms && gl->GetString && gl->version < MPGL_VER(3, 0) && strstr(gl->GetString(GL_EXTENSIONS), "GL_ARB_vertex_program")) @@ -105,11 +96,8 @@ static bool create_context_x11_gl3(struct MPGLContext *ctx, bool debug) (glXCreateContextAttribsARBProc) glXGetProcAddressARB((const GLubyte *)"glXCreateContextAttribsARB"); - const char *glxstr = ""; - const char *(*glXExtStr)(Display *, int) - = mp_getdladdr("glXQueryExtensionsString"); - if (glXExtStr) - glxstr = glXExtStr(vo->x11->display, vo->x11->screen); + const char *glxstr = + glXQueryExtensionsString(vo->x11->display, vo->x11->screen); bool have_ctx_ext = glxstr && !!strstr(glxstr, "GLX_ARB_create_context"); if (!(have_ctx_ext && glXCreateContextAttribsARB)) { |