summaryrefslogtreecommitdiffstats
path: root/video
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-12-09 22:28:16 +0100
committerAlessandro Ghedini <alessandro@ghedini.me>2014-12-17 20:05:46 +0100
commit9bee56cc6740fd201cb807ff5a1c1573bfad073b (patch)
tree8978dfcdc45c4bf799ffe288db9e3a469bb7fc08 /video
parent9fb0180eb27152f997ff7ab79bdc640bb3620f62 (diff)
downloadmpv-9bee56cc6740fd201cb807ff5a1c1573bfad073b.tar.bz2
mpv-9bee56cc6740fd201cb807ff5a1c1573bfad073b.tar.xz
vo_opengl: don't crash if framebuffers are not available
In theory, vo_opengl supports operation without framebuffers. But this has been broken for a while now (commit cc00b3ff is a contender). It crashed because it unconditionally called gl->BindFramebuffer() (which is NULL if framebuffers are missing). Since this function is actually only called to set the default framebuffer, the simplest way to deal with this is to provide a dummy function, insteas of uglifying the code with additional if branches.
Diffstat (limited to 'video')
-rw-r--r--video/out/gl_common.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/video/out/gl_common.c b/video/out/gl_common.c
index 195ad72539..b141224080 100644
--- a/video/out/gl_common.c
+++ b/video/out/gl_common.c
@@ -141,6 +141,11 @@ static bool is_software_gl(GL *gl)
strcmp(renderer, "Mesa X11") == 0;
}
+static void dummy_glBindFramebuffer(GLenum target, GLuint framebuffer)
+{
+ assert(framebuffer == 0);
+}
+
#define FN_OFFS(name) offsetof(GL, name)
#define DEF_FN(name) {FN_OFFS(name), {"gl" # name}}
@@ -618,6 +623,10 @@ void mpgl_load_functions(GL *gl, void *(*getProcAddress)(const GLubyte *),
mp_verbose(log, "Detected OpenGL features:");
list_features(gl->mpgl_caps, log, MSGL_V, false);
+
+ // Provided for simpler handling if no framebuffer support is available.
+ if (!gl->BindFramebuffer)
+ gl->BindFramebuffer = &dummy_glBindFramebuffer;
}
/**