From 85c21ae40940d6c54e36b5822e9ac1a517185b07 Mon Sep 17 00:00:00 2001 From: wm4 Date: Wed, 25 Mar 2015 12:29:19 +0100 Subject: vo_opengl: cleanup swap_control extension loading Instead of somehow looking for the substring "_swap_control" and trying to several arbitrary function names, do it cleanly. The old approach has the problem that it's not very exact, and may even load a pointer to a function which doesn't exist. (Some GL implementations like Mesa return function pointers even the functions which don't exist, and calling them crashes.) I couldn't find any evidence that glXSwapInterval, wglSwapIntervalSGI, or wglSwapInterval actually exist, so don't include them. They were carried over from MPlayer times. To make diagnostics easier, print a warning in verbose mode if the function could not be loaded. --- video/out/gl_common.c | 16 +++++++++++----- video/out/vo_opengl.c | 5 ++++- 2 files changed, 15 insertions(+), 6 deletions(-) (limited to 'video/out') diff --git a/video/out/gl_common.c b/video/out/gl_common.c index 638d757eea..14d7649e8b 100644 --- a/video/out/gl_common.c +++ b/video/out/gl_common.c @@ -243,13 +243,19 @@ static const struct gl_functions gl_functions[] = { .provides = MPGL_CAP_TEX_RG, }, // Swap control, always an OS specific extension + // The OSX code loads this manually. { - .extension = "_swap_control", + .extension = "GLX_SGI_swap_control", .functions = (const struct gl_function[]) { - DEF_FN_NAMES(SwapInterval, "glXSwapIntervalSGI", "glXSwapInterval", - "wglSwapIntervalSGI", "wglSwapInterval", - "wglSwapIntervalEXT"), - {0} + DEF_FN_NAMES(SwapInterval, "glXSwapIntervalSGI"), + {0}, + }, + }, + { + .extension = "WGL_EXT_swap_control", + .functions = (const struct gl_function[]) { + DEF_FN_NAMES(SwapInterval, "wglSwapIntervalEXT"), + {0}, }, }, { diff --git a/video/out/vo_opengl.c b/video/out/vo_opengl.c index 25e25a2e9d..9cf58286e2 100644 --- a/video/out/vo_opengl.c +++ b/video/out/vo_opengl.c @@ -463,8 +463,11 @@ static int preinit(struct vo *vo) mpgl_lock(p->glctx); - if (p->gl->SwapInterval) + if (p->gl->SwapInterval) { p->gl->SwapInterval(p->swap_interval); + } else { + MP_VERBOSE(vo, "swap_control extension missing.\n"); + } p->renderer = gl_video_init(p->gl, vo->log); if (!p->renderer) -- cgit v1.2.3