summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2013-12-19 21:36:50 +0100
committerSebastian Dröge <sebastian@centricular.com>2013-12-26 08:58:27 +0100
commit3e79e7c588f4037aae5afff5e386538130489e23 (patch)
tree323b684af41a9e05cebe1c829691412ad16c819f
parent08103e918c0f660c0736f1ac4daa8b9e9da1c77d (diff)
downloadgstreamer-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.m19
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);