mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-30 21:51:09 +00:00
glcontext: store the thread current context
This commit is contained in:
parent
abe21912f5
commit
d44594c622
2 changed files with 25 additions and 2 deletions
|
@ -66,6 +66,8 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
GST_DEBUG_CATEGORY_STATIC (gst_performance);
|
GST_DEBUG_CATEGORY_STATIC (gst_performance);
|
||||||
|
static GPrivate current_context_key;
|
||||||
|
|
||||||
static GModule *module_self;
|
static GModule *module_self;
|
||||||
static GOnce module_self_gonce = G_ONCE_INIT;
|
static GOnce module_self_gonce = G_ONCE_INIT;
|
||||||
|
|
||||||
|
@ -630,8 +632,13 @@ gst_gl_context_activate (GstGLContext * context, gboolean activate)
|
||||||
GST_OBJECT_LOCK (context);
|
GST_OBJECT_LOCK (context);
|
||||||
result = context_class->activate (context, activate);
|
result = context_class->activate (context, activate);
|
||||||
|
|
||||||
context->priv->active_thread = result
|
if (result && activate) {
|
||||||
&& activate ? context->priv->gl_thread : NULL;
|
context->priv->active_thread = g_thread_self ();
|
||||||
|
g_private_set (¤t_context_key, context);
|
||||||
|
} else {
|
||||||
|
context->priv->active_thread = NULL;
|
||||||
|
g_private_set (¤t_context_key, NULL);
|
||||||
|
}
|
||||||
GST_OBJECT_UNLOCK (context);
|
GST_OBJECT_UNLOCK (context);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
@ -1684,6 +1691,21 @@ gst_gl_context_check_feature (GstGLContext * context, const gchar * feature)
|
||||||
return context_class->check_feature (context, feature);
|
return context_class->check_feature (context, feature);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_gl_context_get_current:
|
||||||
|
*
|
||||||
|
* See also gst_gl_context_activate().
|
||||||
|
*
|
||||||
|
* Returns: the #GstGLContext active in the current thread or %NULL
|
||||||
|
*
|
||||||
|
* Since: 1.6
|
||||||
|
*/
|
||||||
|
GstGLContext *
|
||||||
|
gst_gl_context_get_current (void)
|
||||||
|
{
|
||||||
|
return g_private_get (¤t_context_key);
|
||||||
|
}
|
||||||
|
|
||||||
static GstGLAPI
|
static GstGLAPI
|
||||||
gst_gl_wrapped_context_get_gl_api (GstGLContext * context)
|
gst_gl_wrapped_context_get_gl_api (GstGLContext * context)
|
||||||
{
|
{
|
||||||
|
|
|
@ -122,6 +122,7 @@ GstGLContext * gst_gl_context_new_wrapped (GstGLDisplay *display,
|
||||||
|
|
||||||
gboolean gst_gl_context_activate (GstGLContext *context, gboolean activate);
|
gboolean gst_gl_context_activate (GstGLContext *context, gboolean activate);
|
||||||
GThread * gst_gl_context_get_thread (GstGLContext *context);
|
GThread * gst_gl_context_get_thread (GstGLContext *context);
|
||||||
|
GstGLContext * gst_gl_context_get_current (void);
|
||||||
|
|
||||||
GstGLDisplay * gst_gl_context_get_display (GstGLContext *context);
|
GstGLDisplay * gst_gl_context_get_display (GstGLContext *context);
|
||||||
gpointer gst_gl_context_get_proc_address (GstGLContext *context, const gchar *name);
|
gpointer gst_gl_context_get_proc_address (GstGLContext *context, const gchar *name);
|
||||||
|
|
Loading…
Reference in a new issue