summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2016-05-05 13:38:08 +0200
committerwm4 <wm4@nowhere>2016-05-05 13:38:08 +0200
commitf56555b5144069d0a8ac81d407abfa0c6be30c2e (patch)
tree90724b09871cac425458de4a80f78ea3485366a5
parente5e1088c922ab6e767d7731bf9fe6044cb4071c8 (diff)
downloadmpv-f56555b5144069d0a8ac81d407abfa0c6be30c2e.tar.bz2
mpv-f56555b5144069d0a8ac81d407abfa0c6be30c2e.tar.xz
vo_opengl: EGL: fix hwdec probing
If ANGLE was probed before (but rejected), the ANGLE API can remain "initialized", and eglGetCurrentDisplay() will return a non-NULL EGLDisplay. Then if a native GL context is used, the ANGLE/EGL API will then (apparently) keep working alongside native OpenGL API. Since GL objects are just numbers, they'll simply fail to interact, and OpenGL will get invalid textures. For some reason this will result in black textures. With VAAPI-EGL, something similar could happen in theory, but didn't in practice.
-rw-r--r--video/out/opengl/hwdec_d3d11egl.c3
-rw-r--r--video/out/opengl/hwdec_dxva2egl.c3
-rw-r--r--video/out/opengl/hwdec_vaegl.c2
3 files changed, 7 insertions, 1 deletions
diff --git a/video/out/opengl/hwdec_d3d11egl.c b/video/out/opengl/hwdec_d3d11egl.c
index 32fb42a692..de872d1396 100644
--- a/video/out/opengl/hwdec_d3d11egl.c
+++ b/video/out/opengl/hwdec_d3d11egl.c
@@ -116,6 +116,9 @@ static int create(struct gl_hwdec *hw)
if (!egl_display)
return -1;
+ if (!eglGetCurrentContext())
+ return -1;
+
const char *exts = eglQueryString(egl_display, EGL_EXTENSIONS);
if (!exts || !strstr(exts, "EGL_ANGLE_d3d_share_handle_client_buffer") ||
!strstr(exts, "EGL_EXT_device_query"))
diff --git a/video/out/opengl/hwdec_dxva2egl.c b/video/out/opengl/hwdec_dxva2egl.c
index eed942618c..ed1a6e66b7 100644
--- a/video/out/opengl/hwdec_dxva2egl.c
+++ b/video/out/opengl/hwdec_dxva2egl.c
@@ -99,6 +99,9 @@ static int create(struct gl_hwdec *hw)
if (!egl_display)
return -1;
+ if (!eglGetCurrentContext())
+ return -1;
+
const char *exts = eglQueryString(egl_display, EGL_EXTENSIONS);
if (!exts ||
!strstr(exts, "EGL_ANGLE_d3d_share_handle_client_buffer")) {
diff --git a/video/out/opengl/hwdec_vaegl.c b/video/out/opengl/hwdec_vaegl.c
index d62a20a219..6356ec4e8c 100644
--- a/video/out/opengl/hwdec_vaegl.c
+++ b/video/out/opengl/hwdec_vaegl.c
@@ -183,7 +183,7 @@ static int create(struct gl_hwdec *hw)
if (hw->hwctx)
return -1;
- if (!eglGetCurrentDisplay())
+ if (!eglGetCurrentContext())
return -1;
const char *exts = eglQueryString(eglGetCurrentDisplay(), EGL_EXTENSIONS);