diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2013-12-19 21:36:50 +0100 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2013-12-26 08:58:27 +0100 |
commit | 3e79e7c588f4037aae5afff5e386538130489e23 (patch) | |
tree | 323b684af41a9e05cebe1c829691412ad16c819f | |
parent | 08103e918c0f660c0736f1ac4daa8b9e9da1c77d (diff) | |
download | gstreamer-plugins-bad-3e79e7c588f4037aae5afff5e386538130489e23.tar.gz |
eglglessink: Don't set the EAGLContext of the main thread and don't reuse it either
... instead create a new context for every sink instance.
https://bugzilla.gnome.org/show_bug.cgi?id=720421
-rw-r--r-- | ext/eglgles/gstegladaptation_eagl.m | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/ext/eglgles/gstegladaptation_eagl.m b/ext/eglgles/gstegladaptation_eagl.m index 142bc9500..9d7d608c4 100644 --- a/ext/eglgles/gstegladaptation_eagl.m +++ b/ext/eglgles/gstegladaptation_eagl.m @@ -113,14 +113,9 @@ gst_egl_adaptation_create_egl_context (GstEglAdaptationContext * ctx) __block EAGLContext *context; dispatch_sync(dispatch_get_main_queue(), ^{ - EAGLContext *cur_ctx = [EAGLContext currentContext]; - if (cur_ctx) { - context = cur_ctx; - } else { - context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; - if (context == nil) { - GST_ERROR_OBJECT (ctx->element, "Failed to create EAGL GLES2 context"); - } + context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; + if (context == nil) { + GST_ERROR_OBJECT (ctx->element, "Failed to create EAGL GLES2 context"); } }); @@ -154,10 +149,6 @@ gst_egl_adaptation_context_make_current (GstEglAdaptationContext * ctx, return FALSE; } ctx_to_set = ctx->eaglctx->eagl_context; - dispatch_sync(dispatch_get_main_queue(), ^{ - [EAGLContext setCurrentContext: ctx_to_set]; - }); - } else { GST_DEBUG_OBJECT (ctx->element, "Detaching context from thread %p", g_thread_self ()); @@ -184,6 +175,8 @@ gst_egl_adaptation_create_surface (GstEglAdaptationContext * ctx) dispatch_sync(dispatch_get_main_queue(), ^{ + gst_egl_adaptation_context_make_current (ctx, TRUE); + if (ctx->eaglctx->framebuffer) { framebuffer = ctx->eaglctx->framebuffer; } else { @@ -209,6 +202,8 @@ gst_egl_adaptation_create_surface (GstEglAdaptationContext * ctx) glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, width, height); glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthRenderbuffer); + + gst_egl_adaptation_context_make_current (ctx, FALSE); }); glBindFramebuffer(GL_FRAMEBUFFER, framebuffer); |