summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-03-25 12:29:19 +0100
committerwm4 <wm4@nowhere>2015-03-25 12:29:19 +0100
commit85c21ae40940d6c54e36b5822e9ac1a517185b07 (patch)
tree37e662c833eb9e622514f40d46d5ffd7755df81f
parentcdf9abd872f1923ef5a185d06b412f342935f107 (diff)
downloadmpv-85c21ae40940d6c54e36b5822e9ac1a517185b07.tar.bz2
mpv-85c21ae40940d6c54e36b5822e9ac1a517185b07.tar.xz
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.
-rw-r--r--video/out/gl_common.c16
-rw-r--r--video/out/vo_opengl.c5
2 files changed, 15 insertions, 6 deletions
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)