mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-25 03:01:03 +00:00
gl/context: add gl extension checking to check_feature()
Useful for extensions that do not define any new GL API entrypoints but can still modify behaviour when used.
This commit is contained in:
parent
63831b7dd2
commit
4435c1c289
1 changed files with 13 additions and 3 deletions
|
@ -149,6 +149,8 @@ struct _GstGLContextPrivate
|
||||||
|
|
||||||
gint gl_major;
|
gint gl_major;
|
||||||
gint gl_minor;
|
gint gl_minor;
|
||||||
|
|
||||||
|
gchar *gl_exts;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -373,6 +375,8 @@ gst_gl_context_finalize (GObject * object)
|
||||||
g_cond_clear (&context->priv->destroy_cond);
|
g_cond_clear (&context->priv->destroy_cond);
|
||||||
g_cond_clear (&context->priv->create_cond);
|
g_cond_clear (&context->priv->create_cond);
|
||||||
|
|
||||||
|
g_free (context->priv->gl_exts);
|
||||||
|
|
||||||
G_OBJECT_CLASS (gst_gl_context_parent_class)->finalize (object);
|
G_OBJECT_CLASS (gst_gl_context_parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -849,17 +853,19 @@ gst_gl_context_create_thread (GstGLContext * context)
|
||||||
GST_DEBUG_OBJECT (context, "GL_EXTENSIONS: %s", ext_g_str->str);
|
GST_DEBUG_OBJECT (context, "GL_EXTENSIONS: %s", ext_g_str->str);
|
||||||
_gst_gl_feature_check_ext_functions (context, context->priv->gl_major,
|
_gst_gl_feature_check_ext_functions (context, context->priv->gl_major,
|
||||||
context->priv->gl_minor, ext_g_str->str);
|
context->priv->gl_minor, ext_g_str->str);
|
||||||
|
|
||||||
|
context->priv->gl_exts = g_string_free (ext_g_str, FALSE);
|
||||||
} else {
|
} else {
|
||||||
ext_const_c_str = (const gchar *) gl->GetString (GL_EXTENSIONS);
|
ext_const_c_str = (const gchar *) gl->GetString (GL_EXTENSIONS);
|
||||||
if (!ext_const_c_str)
|
if (!ext_const_c_str)
|
||||||
ext_const_c_str = "";
|
ext_const_c_str = "";
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (context, "GL_EXTENSIONS: %s", ext_const_c_str);
|
GST_DEBUG_OBJECT (context, "GL_EXTENSIONS: %s", ext_const_c_str);
|
||||||
_gst_gl_feature_check_ext_functions (context, context->priv->gl_major,
|
_gst_gl_feature_check_ext_functions (context, context->priv->gl_major,
|
||||||
context->priv->gl_minor, ext_const_c_str);
|
context->priv->gl_minor, ext_const_c_str);
|
||||||
}
|
|
||||||
|
|
||||||
if (ext_g_str)
|
context->priv->gl_exts = g_strdup (ext_const_c_str);
|
||||||
g_string_free (ext_g_str, TRUE);
|
}
|
||||||
|
|
||||||
context->priv->alive = TRUE;
|
context->priv->alive = TRUE;
|
||||||
|
|
||||||
|
@ -1051,6 +1057,10 @@ gst_gl_context_check_feature (GstGLContext * context, const gchar * feature)
|
||||||
g_return_val_if_fail (feature != NULL, FALSE);
|
g_return_val_if_fail (feature != NULL, FALSE);
|
||||||
|
|
||||||
context_class = GST_GL_CONTEXT_GET_CLASS (context);
|
context_class = GST_GL_CONTEXT_GET_CLASS (context);
|
||||||
|
|
||||||
|
if (g_strstr_len (feature, 3, "GL_"))
|
||||||
|
return gst_gl_check_extension (feature, context->priv->gl_exts);
|
||||||
|
|
||||||
if (!context_class->check_feature)
|
if (!context_class->check_feature)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue