mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 12:11:13 +00:00
glcontext: add more functionality to wrapped contexts
Implements get_current_context() and get_proc_address() for wrapped contexts.
This commit is contained in:
parent
366eaea6d2
commit
7d97a35139
7 changed files with 46 additions and 15 deletions
|
@ -51,8 +51,6 @@ static guintptr gst_gl_context_egl_get_gl_context (GstGLContext * context);
|
||||||
static GstGLAPI gst_gl_context_egl_get_gl_api (GstGLContext * context);
|
static GstGLAPI gst_gl_context_egl_get_gl_api (GstGLContext * context);
|
||||||
static GstGLPlatform gst_gl_context_egl_get_gl_platform (GstGLContext *
|
static GstGLPlatform gst_gl_context_egl_get_gl_platform (GstGLContext *
|
||||||
context);
|
context);
|
||||||
static gpointer gst_gl_context_egl_get_proc_address (GstGLContext * context,
|
|
||||||
const gchar * name);
|
|
||||||
static gboolean gst_gl_context_egl_check_feature (GstGLContext * context,
|
static gboolean gst_gl_context_egl_check_feature (GstGLContext * context,
|
||||||
const gchar * feature);
|
const gchar * feature);
|
||||||
|
|
||||||
|
@ -547,7 +545,7 @@ load_egl_module (gpointer user_data)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gpointer
|
gpointer
|
||||||
gst_gl_context_egl_get_proc_address (GstGLContext * context, const gchar * name)
|
gst_gl_context_egl_get_proc_address (GstGLContext * context, const gchar * name)
|
||||||
{
|
{
|
||||||
gpointer result = NULL;
|
gpointer result = NULL;
|
||||||
|
|
|
@ -56,8 +56,9 @@ struct _GstGLContextEGLClass {
|
||||||
};
|
};
|
||||||
|
|
||||||
GType gst_gl_context_egl_get_type (void);
|
GType gst_gl_context_egl_get_type (void);
|
||||||
GstGLContextEGL * gst_gl_context_egl_new (void);
|
GstGLContextEGL * gst_gl_context_egl_new (void);
|
||||||
guintptr gst_gl_context_egl_get_current_context (void);
|
guintptr gst_gl_context_egl_get_current_context (void);
|
||||||
|
gpointer gst_gl_context_egl_get_proc_address (GstGLContext * context, const gchar * name);
|
||||||
|
|
||||||
/* TODO:
|
/* TODO:
|
||||||
* add support for EGL_NO_CONTEXT
|
* add support for EGL_NO_CONTEXT
|
||||||
|
|
|
@ -325,6 +325,7 @@ gst_gl_context_new_wrapped (GstGLDisplay * display, guintptr handle,
|
||||||
{
|
{
|
||||||
GstGLContext *context;
|
GstGLContext *context;
|
||||||
GstGLWrappedContext *context_wrap = NULL;
|
GstGLWrappedContext *context_wrap = NULL;
|
||||||
|
GstGLContextClass *context_class;
|
||||||
|
|
||||||
_init_debug ();
|
_init_debug ();
|
||||||
|
|
||||||
|
@ -344,6 +345,39 @@ gst_gl_context_new_wrapped (GstGLDisplay * display, guintptr handle,
|
||||||
context_wrap->platform = context_type;
|
context_wrap->platform = context_type;
|
||||||
context_wrap->available_apis = available_apis;
|
context_wrap->available_apis = available_apis;
|
||||||
|
|
||||||
|
context_class = GST_GL_CONTEXT_GET_CLASS (context);
|
||||||
|
|
||||||
|
#if GST_GL_HAVE_PLATFORM_GLX
|
||||||
|
if (context_type == GST_GL_PLATFORM_GLX) {
|
||||||
|
context_class->get_current_context = gst_gl_context_glx_get_current_context;
|
||||||
|
context_class->get_proc_address = gst_gl_context_glx_get_proc_address;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#if GST_GL_HAVE_PLATFORM_EGL
|
||||||
|
if (context_type == GST_GL_PLATFORM_EGL) {
|
||||||
|
context_class->get_current_context = gst_gl_context_egl_get_current_context;
|
||||||
|
context_class->get_proc_address = gst_gl_context_egl_get_proc_address;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#if GST_GL_HAVE_PLATFORM_CGL
|
||||||
|
if (context_type == GST_GL_PLATFORM_CGL) {
|
||||||
|
context_class->get_current_context =
|
||||||
|
gst_gl_context_cocoa_get_current_context;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#if GST_GL_HAVE_PLATFORM_WGL
|
||||||
|
if (context_type == GST_GL_PLATFORM_WGL) {
|
||||||
|
context_class->get_current_context = gst_gl_context_wgl_get_current_context;
|
||||||
|
context_class->get_proc_address = gst_gl_context_wgl_get_proc_address;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#if GST_GL_HAVE_PLATFORM_EAGL
|
||||||
|
if (context_type == GST_GL_PLATFORM_EAGL) {
|
||||||
|
context_class->get_current_context =
|
||||||
|
gst_gl_context_eagl_get_current_context;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,8 +46,6 @@ static void gst_gl_context_wgl_destroy_context (GstGLContext * context);
|
||||||
GstGLAPI gst_gl_context_wgl_get_gl_api (GstGLContext * context);
|
GstGLAPI gst_gl_context_wgl_get_gl_api (GstGLContext * context);
|
||||||
static GstGLPlatform gst_gl_context_wgl_get_gl_platform (GstGLContext *
|
static GstGLPlatform gst_gl_context_wgl_get_gl_platform (GstGLContext *
|
||||||
context);
|
context);
|
||||||
static gpointer gst_gl_context_wgl_get_proc_address (GstGLContext * context,
|
|
||||||
const gchar * name);
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_gl_context_wgl_class_init (GstGLContextWGLClass * klass)
|
gst_gl_context_wgl_class_init (GstGLContextWGLClass * klass)
|
||||||
|
@ -285,7 +283,7 @@ gst_gl_context_wgl_get_gl_platform (GstGLContext * context)
|
||||||
return GST_GL_PLATFORM_WGL;
|
return GST_GL_PLATFORM_WGL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gpointer
|
gpointer
|
||||||
gst_gl_context_wgl_get_proc_address (GstGLContext * context, const gchar * name)
|
gst_gl_context_wgl_get_proc_address (GstGLContext * context, const gchar * name)
|
||||||
{
|
{
|
||||||
gpointer result;
|
gpointer result;
|
||||||
|
|
|
@ -55,8 +55,9 @@ struct _GstGLContextWGLClass {
|
||||||
|
|
||||||
GType gst_gl_context_wgl_get_type (void);
|
GType gst_gl_context_wgl_get_type (void);
|
||||||
|
|
||||||
GstGLContextWGL * gst_gl_context_wgl_new (void);
|
GstGLContextWGL * gst_gl_context_wgl_new (void);
|
||||||
guintptr gst_gl_context_wgl_get_current_context (void);
|
guintptr gst_gl_context_wgl_get_current_context (void);
|
||||||
|
gpointer gst_gl_context_wgl_get_proc_address (GstGLContext * context, const gchar * name);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
|
|
@ -57,8 +57,6 @@ static gboolean gst_gl_context_glx_choose_format (GstGLContext *
|
||||||
GstGLAPI gst_gl_context_glx_get_gl_api (GstGLContext * context);
|
GstGLAPI gst_gl_context_glx_get_gl_api (GstGLContext * context);
|
||||||
static GstGLPlatform gst_gl_context_glx_get_gl_platform (GstGLContext *
|
static GstGLPlatform gst_gl_context_glx_get_gl_platform (GstGLContext *
|
||||||
context);
|
context);
|
||||||
static gpointer gst_gl_context_glx_get_proc_address (GstGLContext * context,
|
|
||||||
const gchar * name);
|
|
||||||
|
|
||||||
struct _GstGLContextGLXPrivate
|
struct _GstGLContextGLXPrivate
|
||||||
{
|
{
|
||||||
|
@ -421,7 +419,7 @@ gst_gl_context_glx_get_gl_platform (GstGLContext * context)
|
||||||
return GST_GL_PLATFORM_GLX;
|
return GST_GL_PLATFORM_GLX;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gpointer
|
gpointer
|
||||||
gst_gl_context_glx_get_proc_address (GstGLContext * context, const gchar * name)
|
gst_gl_context_glx_get_proc_address (GstGLContext * context, const gchar * name)
|
||||||
{
|
{
|
||||||
gpointer result;
|
gpointer result;
|
||||||
|
|
|
@ -59,8 +59,9 @@ struct _GstGLContextGLXClass {
|
||||||
|
|
||||||
GType gst_gl_context_glx_get_type (void);
|
GType gst_gl_context_glx_get_type (void);
|
||||||
|
|
||||||
GstGLContextGLX * gst_gl_context_glx_new (void);
|
GstGLContextGLX * gst_gl_context_glx_new (void);
|
||||||
guintptr gst_gl_context_glx_get_current_context (void);
|
guintptr gst_gl_context_glx_get_current_context (void);
|
||||||
|
gpointer gst_gl_context_glx_get_proc_address (GstGLContext * context, const gchar * name);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue