summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--DOCS/man/vo.rst17
-rw-r--r--video/out/opengl/common.c10
-rw-r--r--video/out/opengl/common.h9
-rw-r--r--video/out/vo_opengl.c7
4 files changed, 29 insertions, 14 deletions
diff --git a/DOCS/man/vo.rst b/DOCS/man/vo.rst
index 5376f269e3..031232030e 100644
--- a/DOCS/man/vo.rst
+++ b/DOCS/man/vo.rst
@@ -777,6 +777,10 @@ Available video output drivers are:
Cocoa/OS X
win
Win32/WGL
+ angle
+ Direct3D11 through the OpenGL ES translation layer ANGLE. This
+ supports almost everything the ``win`` backend does, except ICC
+ profiles, high bit depth video input, and the ``nnedi3`` prescaler.
x11
X11/GLX
wayland
@@ -786,8 +790,15 @@ Available video output drivers are:
x11egl
X11/EGL
- ``es``
- Force or prefer GLES2/3 over desktop OpenGL, if supported.
+ ``es=<mode>``
+ Select whether to use GLES:
+
+ yes
+ Try to prefer ES over Desktop GL
+ no
+ Try to prefer desktop GL over ES
+ auto
+ Use the default for each backend (default)
``fbo-format=<fmt>``
Selects the internal format of textures used for FBOs. The format can
@@ -955,7 +966,7 @@ Available video output drivers are:
This is equivalent to::
- --vo=opengl:scale=spline36:cscale=spline36:dscale=mitchell:dither-depth=auto:correct-downscaling:sigmoid-upscaling:pbo:deband
+ --vo=opengl:scale=spline36:cscale=spline36:dscale=mitchell:dither-depth=auto:correct-downscaling:sigmoid-upscaling:pbo:deband:es=no
Note that some cheaper LCDs do dithering that gravely interferes with
``opengl``'s dithering. Disabling dithering with ``dither-depth=no`` helps.
diff --git a/video/out/opengl/common.c b/video/out/opengl/common.c
index 21e749b9f3..ae4384ec30 100644
--- a/video/out/opengl/common.c
+++ b/video/out/opengl/common.c
@@ -535,12 +535,12 @@ static const struct mpgl_driver *const backends[] = {
#if HAVE_GL_COCOA
&mpgl_driver_cocoa,
#endif
-#if HAVE_GL_WIN32
- &mpgl_driver_w32,
-#endif
#if HAVE_EGL_ANGLE
&mpgl_driver_angle,
#endif
+#if HAVE_GL_WIN32
+ &mpgl_driver_w32,
+#endif
#if HAVE_GL_WAYLAND
&mpgl_driver_wayland,
#endif
@@ -630,8 +630,8 @@ static MPGLContext *init_backend(struct vo *vo, const struct mpgl_driver *driver
if (!ctx->gl->version && !ctx->gl->es)
goto cleanup;
- if (ctx->gl->es && vo->probing) {
- MP_INFO(ctx->vo, "Skipping experimental GLES support (use --vo=opengl).\n");
+ if (probing && ctx->gl->es && (vo_flags & VOFLAG_NO_GLES)) {
+ MP_VERBOSE(ctx->vo, "Skipping GLES backend.\n");
goto cleanup;
}
diff --git a/video/out/opengl/common.h b/video/out/opengl/common.h
index acae464643..8d5bbdbb6d 100644
--- a/video/out/opengl/common.h
+++ b/video/out/opengl/common.h
@@ -75,10 +75,11 @@ enum {
#define MPGL_VER_P(ver) MPGL_VER_GET_MAJOR(ver), MPGL_VER_GET_MINOR(ver)
enum {
- VOFLAG_GLES = 1 << 0, // Hint to prefer GLES2 if possible
- VOFLAG_GL_DEBUG = 1 << 1, // Hint to request debug OpenGL context
- VOFLAG_ALPHA = 1 << 2, // Hint to request alpha framebuffer
- VOFLAG_SW = 1 << 3, // Hint to accept a software GL renderer
+ VOFLAG_GLES = 1 << 0, // Hint to create a GLES2 context
+ VOFLAG_NO_GLES = 1 << 1, // Hint to create a desktop GL context
+ VOFLAG_GL_DEBUG = 1 << 2, // Hint to request debug OpenGL context
+ VOFLAG_ALPHA = 1 << 3, // Hint to request alpha framebuffer
+ VOFLAG_SW = 1 << 4, // Hint to accept a software GL renderer
};
struct MPGLContext;
diff --git a/video/out/vo_opengl.c b/video/out/vo_opengl.c
index 1147aba79a..eb057d139f 100644
--- a/video/out/vo_opengl.c
+++ b/video/out/vo_opengl.c
@@ -397,8 +397,10 @@ static int preinit(struct vo *vo)
if (p->use_gl_debug)
vo_flags |= VOFLAG_GL_DEBUG;
- if (p->es)
+ if (p->es == 1)
vo_flags |= VOFLAG_GLES;
+ if (p->es == -1)
+ vo_flags |= VOFLAG_NO_GLES;
if (p->allow_sw)
vo_flags |= VOFLAG_SW;
@@ -462,7 +464,7 @@ static const struct m_option options[] = {
OPT_FLAG("debug", use_gl_debug, 0),
OPT_STRING_VALIDATE("backend", backend, 0, mpgl_validate_backend_opt),
OPT_FLAG("sw", allow_sw, 0),
- OPT_FLAG("es", es, 0),
+ OPT_CHOICE("es", es, 0, ({"no", -1}, {"auto", 0}, {"yes", 1})),
OPT_INTPAIR("check-pattern", opt_pattern, 0),
OPT_INTRANGE("vsync-fences", opt_vsync_fences, 0, 0, NUM_VSYNC_FENCES),
@@ -502,6 +504,7 @@ const struct vo_driver video_out_opengl_hq = {
.priv_size = sizeof(struct gl_priv),
.priv_defaults = &(const struct gl_priv){
.renderer_opts = (struct gl_video_opts *)&gl_video_opts_hq_def,
+ .es = -1,
},
.options = options,
};