summaryrefslogtreecommitdiff
path: root/gst-libs/gst/gl/gstglcontext.c
diff options
context:
space:
mode:
authorMatthew Waters <matthew@centricular.com>2015-07-18 17:08:36 +1000
committerMatthew Waters <matthew@centricular.com>2015-07-18 17:10:04 +1000
commit74711c214df4ab607ff69a428b8e690969a3949e (patch)
tree58defa810dfb237b01f3acf820947201c36395ae /gst-libs/gst/gl/gstglcontext.c
parent0aaf9db1df81dd7a02799c6502d72ade3080ae47 (diff)
downloadgstreamer-plugins-bad-74711c214df4ab607ff69a428b8e690969a3949e.tar.gz
glcontext: consolidate get_proc_address function definition
Pass the GstGLAPI directly.
Diffstat (limited to 'gst-libs/gst/gl/gstglcontext.c')
-rw-r--r--gst-libs/gst/gl/gstglcontext.c43
1 files changed, 31 insertions, 12 deletions
diff --git a/gst-libs/gst/gl/gstglcontext.c b/gst-libs/gst/gl/gstglcontext.c
index 2a418e1ea..a8e4af060 100644
--- a/gst-libs/gst/gl/gstglcontext.c
+++ b/gst-libs/gst/gl/gstglcontext.c
@@ -174,8 +174,6 @@ G_DEFINE_ABSTRACT_TYPE (GstGLContext, gst_gl_context, GST_TYPE_OBJECT);
static void _init_debug (void);
static gpointer gst_gl_context_create_thread (GstGLContext * context);
-static gpointer _default_get_proc_address (GstGLContext * context,
- const gchar * name);
static void gst_gl_context_finalize (GObject * object);
struct _GstGLContextPrivate
@@ -269,7 +267,8 @@ gst_gl_context_class_init (GstGLContextClass * klass)
{
g_type_class_add_private (klass, sizeof (GstGLContextPrivate));
- klass->get_proc_address = GST_DEBUG_FUNCPTR (_default_get_proc_address);
+ klass->get_proc_address =
+ GST_DEBUG_FUNCPTR (gst_gl_context_default_get_proc_address);
G_OBJECT_CLASS (klass)->finalize = gst_gl_context_finalize;
@@ -480,6 +479,32 @@ gst_gl_context_get_current_gl_context (GstGLPlatform context_type)
return handle;
}
+gpointer
+gst_gl_context_get_proc_address_with_platform (GstGLPlatform context_type,
+ GstGLAPI gl_api, const gchar * name)
+{
+ gpointer ret = NULL;
+
+#if GST_GL_HAVE_PLATFORM_GLX
+ if (!ret && (context_type & GST_GL_PLATFORM_GLX) != 0)
+ ret = gst_gl_context_glx_get_proc_address (gl_api, name);
+#endif
+#if GST_GL_HAVE_PLATFORM_EGL
+ if (!ret && (context_type & GST_GL_PLATFORM_EGL) != 0)
+ ret = gst_gl_context_egl_get_proc_address (gl_api, name);
+#endif
+#if GST_GL_HAVE_PLATFORM_WGL
+ if (!ret && (context_type & GST_GL_PLATFORM_WGL) != 0)
+ ret = gst_gl_context_wgl_get_proc_address (gl_api, name);
+#endif
+ /* CGL and EAGL rely on the default impl */
+
+ if (!ret)
+ ret = gst_gl_context_default_get_proc_address (gl_api, name);
+
+ return ret;
+}
+
/**
* gst_gl_context_get_current_gl_api:
* @major: (out): (allow-none): the major version
@@ -723,14 +748,6 @@ gst_gl_context_get_gl_api (GstGLContext * context)
return context_class->get_gl_api (context);
}
-static gpointer
-_default_get_proc_address (GstGLContext * context, const gchar * name)
-{
- GstGLAPI gl_api = gst_gl_context_get_gl_api (context);
-
- return gst_gl_context_default_get_proc_address (gl_api, name);
-}
-
/**
* gst_gl_context_get_proc_address:
* @context: a #GstGLContext
@@ -751,12 +768,14 @@ gst_gl_context_get_proc_address (GstGLContext * context, const gchar * name)
{
gpointer ret;
GstGLContextClass *context_class;
+ GstGLAPI gl_api;
g_return_val_if_fail (GST_GL_IS_CONTEXT (context), NULL);
context_class = GST_GL_CONTEXT_GET_CLASS (context);
g_return_val_if_fail (context_class->get_proc_address != NULL, NULL);
- ret = context_class->get_proc_address (context, name);
+ gl_api = gst_gl_context_get_gl_api (context);
+ ret = context_class->get_proc_address (gl_api, name);
return ret;
}