summaryrefslogtreecommitdiffstats
path: root/video/out/opengl/context_x11.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2016-03-19 19:29:41 +0100
committerwm4 <wm4@nowhere>2016-03-19 19:31:17 +0100
commit3353923f2906368fb4d0b1fc0927f9f8fce30cf8 (patch)
tree296bd0f2399b7c686ea36fa71757f7892e074310 /video/out/opengl/context_x11.c
parent769f79bd39ceacdb34cd011271addf48d79cee5a (diff)
downloadmpv-3353923f2906368fb4d0b1fc0927f9f8fce30cf8.tar.bz2
mpv-3353923f2906368fb4d0b1fc0927f9f8fce30cf8.tar.xz
vo_opengl: GLX: try to create 3.3 core profile context
Until now, we have tried to create a GL 3.0 context. The main reason for this is that many Mesa-based drivers did not support anything better. But some drivers (Mesa AMD) will not report a higher OpenGL version, because their compatibility mode is restricted. While later GL features are reported as extensions just fine, there doesn't seem to be a way to determine or enable higher GLSL versions. Add some more shitty hacks to try to deal with this messed up situation, and try to probe each interesting GL version separately (starting with 3.3, then 3.2 etc.). Other backends might suffer from similar problems, but these will have to deal with it on their own. Probably fixes #2938, or maybe not.
Diffstat (limited to 'video/out/opengl/context_x11.c')
-rw-r--r--video/out/opengl/context_x11.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/video/out/opengl/context_x11.c b/video/out/opengl/context_x11.c
index 6a6441cd23..c02730c729 100644
--- a/video/out/opengl/context_x11.c
+++ b/video/out/opengl/context_x11.c
@@ -125,10 +125,8 @@ static bool create_context_x11_gl3(struct MPGLContext *ctx, int vo_flags,
glx_ctx->fbc, 0, True,
context_attribs);
vo_x11_silence_xlib(-1);
- if (!context) {
- MP_VERBOSE(vo, "Could not create GL3 context. Retrying with legacy context.\n");
+ if (!context)
return false;
- }
// set context
if (!glXMakeCurrent(vo->x11->display, vo->x11->window, context)) {
@@ -253,9 +251,18 @@ static int glx_init(struct MPGLContext *ctx, int flags)
bool success = false;
if (!(flags & VOFLAG_GLES)) {
- success = create_context_x11_gl3(ctx, flags, 300, false);
- if (!success)
- success = create_context_x11_old(ctx);
+ for (int n = 0; mpgl_preferred_gl_versions[n]; n++) {
+ int version = mpgl_preferred_gl_versions[n];
+ MP_VERBOSE(vo, "Creating OpenGL %d.%d context...\n",
+ MPGL_VER_P(version));
+ if (version >= 300) {
+ success = create_context_x11_gl3(ctx, flags, version, false);
+ } else {
+ success = create_context_x11_old(ctx);
+ }
+ if (success)
+ break;
+ }
}
if (!success) // try ES
success = create_context_x11_gl3(ctx, flags, 200, true);