From 56882eaee4211ba158e82ecbd3da6c760dcc945e Mon Sep 17 00:00:00 2001 From: wm4 Date: Tue, 9 Dec 2014 22:28:16 +0100 Subject: 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. --- video/out/gl_common.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/video/out/gl_common.c b/video/out/gl_common.c index dddb11a53e..5edd80146b 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_functions2(GL *gl, void *(*get_fn)(void *ctx, const char *n), 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; } static void *get_procaddr_wrapper(void *ctx, const char *name) -- cgit v1.2.3