diff options
author | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2010-02-27 18:16:41 +0000 |
---|---|---|
committer | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2010-02-27 18:16:41 +0000 |
commit | e92eaa0fd82d5824eb6a29acd7886b4331ad3087 (patch) | |
tree | 5cbabe7233c578df583d3d8fff00a746374c8341 /libvo/vo_gl.c | |
parent | 05c24134de2923762a718b4e1c31c60131d46124 (diff) | |
download | mpv-e92eaa0fd82d5824eb6a29acd7886b4331ad3087.tar.bz2 mpv-e92eaa0fd82d5824eb6a29acd7886b4331ad3087.tar.xz |
Only prefer -vo gl over -vo x11 if hardware acceleration is available.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30761 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo/vo_gl.c')
-rw-r--r-- | libvo/vo_gl.c | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/libvo/vo_gl.c b/libvo/vo_gl.c index acf7e96891..502058ace6 100644 --- a/libvo/vo_gl.c +++ b/libvo/vo_gl.c @@ -47,6 +47,21 @@ static const vo_info_t info = const LIBVO_EXTERN(gl) + +static const vo_info_t info_nosw = +{ + "X11 (OpenGL) no software rendering", + "gl_nosw", + "Arpad Gereoffy <arpi@esp-team.scene.hu>", + "" +}; +static int preinit_nosw(const char *arg); +#define info info_nosw +#define preinit preinit_nosw +const LIBVO_EXTERN(gl_nosw) +#undef info +#undef preinit + #ifdef CONFIG_GL_X11 static int wsGLXAttrib[] = { GLX_RGBA, GLX_RED_SIZE,1, @@ -444,6 +459,13 @@ static void uninitGl(void) { err_shown = 0; } +static int isSoftwareGl(void) +{ + const char *renderer = GetString(GL_RENDERER); +renderer = "Software Rasterizer"; + return strcmp(renderer, "Software Rasterizer") == 0; +} + static void autodetectGlExtensions(void) { const char *extensions = GetString(GL_EXTENSIONS); const char *vendor = GetString(GL_VENDOR); @@ -1052,7 +1074,7 @@ static const opt_t subopts[] = { {NULL} }; -static int preinit(const char *arg) +static int preinit_internal(const char *arg, int allow_sw) { enum MPGLType gltype = GLTYPE_X11; // set defaults @@ -1161,11 +1183,13 @@ static int preinit(const char *arg) } if (!init_mpglcontext(&glctx, gltype)) goto err_out; - if (use_yuv == -1) { + if (use_yuv == -1 || !allow_sw) { if (create_window(320, 200, VOFLAG_HIDDEN, NULL) < 0) goto err_out; if (glctx.setGlWindow(&glctx) == SET_WINDOW_FAILED) goto err_out; + if (!allow_sw && isSoftwareGl()) + goto err_out; autodetectGlExtensions(); } if (many_fmts) @@ -1181,6 +1205,16 @@ err_out: return -1; } +static int preinit(const char *arg) +{ + return preinit_internal(arg, 1); +} + +static int preinit_nosw(const char *arg) +{ + return preinit_internal(arg, 0); +} + static const struct { const char *name; int *value; |