Commit 0be301af authored by Matthew Waters's avatar Matthew Waters 🐨 Committed by Tim-Philipp Müller

[621/906] GstGLRendererAPI => GstGLAPI and get GstGLAPI from a window

parent e1ec48b6
...@@ -58,7 +58,7 @@ struct _GstGLWindowCocoaClass { ...@@ -58,7 +58,7 @@ struct _GstGLWindowCocoaClass {
GType gst_gl_window_cocoa_get_type (void); GType gst_gl_window_cocoa_get_type (void);
GstGLWindowCocoa * gst_gl_window_cocoa_new (GstGLRendererAPI render_api, GstGLWindowCocoa * gst_gl_window_cocoa_new (GstGLAPI gl_api,
guintptr external_gl_context); guintptr external_gl_context);
G_END_DECLS G_END_DECLS
......
...@@ -123,6 +123,7 @@ void gst_gl_window_cocoa_quit (GstGLWindow * window, GstGLWindowCB callback, ...@@ -123,6 +123,7 @@ void gst_gl_window_cocoa_quit (GstGLWindow * window, GstGLWindowCB callback,
gpointer data); gpointer data);
void gst_gl_window_cocoa_send_message (GstGLWindow * window, void gst_gl_window_cocoa_send_message (GstGLWindow * window,
GstGLWindowCB callback, gpointer data); GstGLWindowCB callback, gpointer data);
GstGLAPI gst_gl_window_cocoa_get_gl_api (GstGLWindow * window);
struct _GstGLWindowCocoaPrivate struct _GstGLWindowCocoaPrivate
{ {
...@@ -177,6 +178,8 @@ gst_gl_window_cocoa_class_init (GstGLWindowCocoaClass * klass) ...@@ -177,6 +178,8 @@ gst_gl_window_cocoa_class_init (GstGLWindowCocoaClass * klass)
window_class->quit = GST_DEBUG_FUNCPTR (gst_gl_window_cocoa_quit); window_class->quit = GST_DEBUG_FUNCPTR (gst_gl_window_cocoa_quit);
window_class->send_message = window_class->send_message =
GST_DEBUG_FUNCPTR (gst_gl_window_cocoa_send_message); GST_DEBUG_FUNCPTR (gst_gl_window_cocoa_send_message);
window_class->get_gl_api =
GST_DEBUG_FUNCPTR (gst_gl_window_cocoa_get_gl_api);
#ifndef GNUSTEP #ifndef GNUSTEP
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
...@@ -194,7 +197,7 @@ gst_gl_window_cocoa_init (GstGLWindowCocoa * window) ...@@ -194,7 +197,7 @@ gst_gl_window_cocoa_init (GstGLWindowCocoa * window)
/* Must be called in the gl thread */ /* Must be called in the gl thread */
GstGLWindowCocoa * GstGLWindowCocoa *
gst_gl_window_cocoa_new (GstGLRendererAPI render_api, guintptr external_gl_context) gst_gl_window_cocoa_new (GstGLAPI gl_api, guintptr external_gl_context)
{ {
GstGLWindowCocoa *window = g_object_new (GST_GL_TYPE_WINDOW_COCOA, NULL); GstGLWindowCocoa *window = g_object_new (GST_GL_TYPE_WINDOW_COCOA, NULL);
GstGLWindowCocoaPrivate *priv = window->priv; GstGLWindowCocoaPrivate *priv = window->priv;
...@@ -446,6 +449,11 @@ gst_gl_window_cocoa_send_message (GstGLWindow * window, GstGLWindowCB callback, ...@@ -446,6 +449,11 @@ gst_gl_window_cocoa_send_message (GstGLWindow * window, GstGLWindowCB callback,
} }
} }
GstGLAPI
gst_gl_window_cocoa_get_gl_api (GstGLWindow * window)
{
return GST_GL_API_OPENGL;
}
/* =============================================================*/ /* =============================================================*/
/* */ /* */
......
...@@ -22,82 +22,61 @@ ...@@ -22,82 +22,61 @@
#define __GST_GL_RENDERER_H__ #define __GST_GL_RENDERER_H__
/* OpenGL 2.0 for Embedded Systems */ /* OpenGL 2.0 for Embedded Systems */
#ifdef GST_GL_RENDERER_GLES2 #ifdef HAVE_GLES2
# undef UNICODE
# include <EGL/egl.h>
# define UNICODE
# include <GLES2/gl2.h> # include <GLES2/gl2.h>
# include "gstgles2.h" # if !HAVE_OPENGL
/* OpenGL for usual systems */ # include "gstgles2.h"
# endif
#endif #endif
#if GST_GL_RENDERER_GL || GST_GL_RENDERER_GL3
/* OpenGL for usual systems */
#if HAVE_OPENGL
# if __APPLE__ # if __APPLE__
# include <GL/glew.h> # include <GL/glew.h>
# include <OpenGL/OpenGL.h> # include <OpenGL/OpenGL.h>
# include <OpenGL/gl.h> # include <OpenGL/gl.h>
# else # else
# if HAVE_GLEW
# include <GL/glew.h> # include <GL/glew.h>
# endif # include <GL/gl.h>
# include <GL/gl.h>
# endif # endif
#endif #endif
#include <gst/gst.h> #if HAVE_GLX
# include <GL/glx.h>
G_BEGIN_DECLS #endif
#define GST_GL_TYPE_RENDERER (gst_gl_renderer_get_type()) #if HAVE_EGL
#define GST_GL_RENDERER(o) (G_TYPE_CHECK_INSTANCE_CAST((o), GST_GL_TYPE_RENDERER, GstGLRenderer)) # undef UNICODE
#define GST_GL_RENDERER_CLASS(k) (G_TYPE_CHECK_CLASS((k), GST_GL_TYPE_RENDERER, GstGLRendererClass)) # include <EGL/egl.h>
#define GST_GL_IS_RENDERER(o) (G_TYPE_CHECK_INSTANCE_TYPE((o), GST_GL_TYPE_RENDERER)) # define UNICODE
#define GST_GL_IS_RENDERER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE((k), GST_GL_TYPE_RENDERER)) #endif
#define GST_GL_RENDERER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), GST_GL_TYPE_RENDERER, GstGLRendererClass))
#define GST_GL_RENDERER_ERROR (gst_gl_renderer_error_quark ()) #include <gst/gst.h>
typedef struct _GstGLRenderer GstGLRenderer; G_BEGIN_DECLS
typedef struct _GstGLRendererPrivate GstGLRendererPrivate;
typedef struct _GstGLRendererClass GstGLRendererClass;
typedef enum { typedef enum {
GST_GL_RENDERER_API_OPENGL = 1, GST_GL_API_NONE = 0,
GST_GL_RENDERER_API_OPENGL3 = 2, GST_GL_API_OPENGL = (1 << 0),
GST_GL_RENDERER_API_GLES = 40, GST_GL_API_OPENGL3 = (1 << 1),
GST_GL_RENDERER_API_GLES2 = 41, GST_GL_API_GLES = (1 << 15),
GST_GL_RENDERER_API_GLES3 = 42, GST_GL_API_GLES2 = (1 << 16),
GST_GL_API_GLES3 = (1 << 17),
GST_GL_RENDERER_API_ANY = 254,
GST_GL_RENDERER_API_LAST = 255 GST_GL_API_ANY = G_MAXUINT32
} GstGLRendererAPI; } GstGLAPI;
struct _GstGLRenderer { typedef enum
/*< private >*/ {
GObject parent; GST_GL_PLATFORM_UNKNOWN = 0,
GST_GL_PLATFORM_EGL,
/*< public >*/ GST_GL_PLATFORM_GLX,
GstGLRendererAPI renderer_api; GST_GL_PLATFORM_WGL,
GST_GL_PLATFORM_CGL,
/*< private >*/
gpointer _reserved[GST_PADDING_LARGE]; GST_GL_PLATFORM_ANY = 254,
}; GST_GL_PLATFORM_LAST = 255
} GstGLPlatform;
struct _GstGLRendererClass {
/*< private >*/
GObjectClass parent_class;
/*< private >*/
gpointer _reserved[GST_PADDING_LARGE];
};
/* methods */
GQuark gst_gl_renderer_error_quark (void);
GType gst_gl_renderer_get_type (void);
GstGLRenderer * gst_gl_renderer_new ();
GstGLRendererAPI gst_gl_renderer_get_renderer_api (GstGLRenderer *renderer);
G_END_DECLS G_END_DECLS
......
...@@ -56,7 +56,7 @@ gst_gl_window_class_init (GstGLWindowClass * klass) ...@@ -56,7 +56,7 @@ gst_gl_window_class_init (GstGLWindowClass * klass)
} }
GstGLWindow * GstGLWindow *
gst_gl_window_new (GstGLRendererAPI render_api, guintptr external_gl_context) gst_gl_window_new (GstGLAPI api, guintptr external_gl_context)
{ {
GstGLWindow *window = NULL; GstGLWindow *window = NULL;
const gchar *user_choice; const gchar *user_choice;
...@@ -73,25 +73,20 @@ gst_gl_window_new (GstGLRendererAPI render_api, guintptr external_gl_context) ...@@ -73,25 +73,20 @@ gst_gl_window_new (GstGLRendererAPI render_api, guintptr external_gl_context)
#ifdef HAVE_WINDOW_X11 #ifdef HAVE_WINDOW_X11
if (!window && (!user_choice || g_strstr_len (user_choice, 3, "x11"))) if (!window && (!user_choice || g_strstr_len (user_choice, 3, "x11")))
window = window = GST_GL_WINDOW (gst_gl_window_x11_new (api, external_gl_context));
GST_GL_WINDOW (gst_gl_window_x11_new (render_api, external_gl_context));
#endif #endif
#ifdef HAVE_WINDOW_WIN32 #ifdef HAVE_WINDOW_WIN32
if (!window && (!user_choice || g_strstr_len (user_choice, 5, "win32"))) if (!window && (!user_choice || g_strstr_len (user_choice, 5, "win32")))
window = window = GST_GL_WINDOW (gst_gl_window_win32_new (api, external_gl_context));
GST_GL_WINDOW (gst_gl_window_win32_new (render_api,
external_gl_context));
#endif #endif
#ifdef HAVE_WINDOW_COCOA #ifdef HAVE_WINDOW_COCOA
if (!window && (!user_choice || g_strstr_len (user_choice, 5, "cocoa"))) if (!window && (!user_choice || g_strstr_len (user_choice, 5, "cocoa")))
window = window = GST_GL_WINDOW (gst_gl_window_cocoa_new (api, external_gl_context));
GST_GL_WINDOW (gst_gl_window_cocoa_new (render_api,
external_gl_context));
#endif #endif
#ifdef HAVE_WINDOW_WAYLAND #ifdef HAVE_WINDOW_WAYLAND
if (!window && (!user_choice || g_strstr_len (user_choice, 7, "wayland"))) if (!window && (!user_choice || g_strstr_len (user_choice, 7, "wayland")))
window = window =
GST_GL_WINDOW (gst_gl_window_wayland_egl_new (render_api, GST_GL_WINDOW (gst_gl_window_wayland_egl_new (api,
external_gl_context)); external_gl_context));
#endif #endif
if (!window) { if (!window) {
...@@ -286,3 +281,22 @@ gst_gl_window_set_close_callback (GstGLWindow * window, GstGLWindowCB callback, ...@@ -286,3 +281,22 @@ gst_gl_window_set_close_callback (GstGLWindow * window, GstGLWindowCB callback,
GST_GL_WINDOW_UNLOCK (window); GST_GL_WINDOW_UNLOCK (window);
} }
GstGLAPI
gst_gl_window_get_gl_api (GstGLWindow * window)
{
GstGLAPI ret;
GstGLWindowClass *window_class;
g_return_val_if_fail (GST_GL_IS_WINDOW (window), GST_GL_API_NONE);
window_class = GST_GL_WINDOW_GET_CLASS (window);
g_return_val_if_fail (window_class->get_gl_api != NULL, GST_GL_API_NONE);
GST_GL_WINDOW_LOCK (window);
ret = window_class->get_gl_api (window);
GST_GL_WINDOW_UNLOCK (window);
return ret;
}
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
#include <gst/gst.h> #include <gst/gst.h>
#include "gstglrenderer.h" #include "gstglapi.h"
G_BEGIN_DECLS G_BEGIN_DECLS
...@@ -57,18 +57,6 @@ typedef void (*GstGLWindowResizeCB) (gpointer data, guint width, guint height); ...@@ -57,18 +57,6 @@ typedef void (*GstGLWindowResizeCB) (gpointer data, guint width, guint height);
#define GST_GL_WINDOW_CB(f) ((GstGLWindowCB) (f)) #define GST_GL_WINDOW_CB(f) ((GstGLWindowCB) (f))
#define GST_GL_WINDOW_RESIZE_CB(f) ((GstGLWindowResizeCB) (f)) #define GST_GL_WINDOW_RESIZE_CB(f) ((GstGLWindowResizeCB) (f))
typedef enum
{
GST_GL_PLATFORM_UNKNOWN = 0,
GST_GL_PLATFORM_EGL,
GST_GL_PLATFORM_GLX,
GST_GL_PLATFORM_WGL,
GST_GL_PLATFORM_CGL,
GST_GL_PLATFORM_ANY = 254,
GST_GL_PLATFORM_LAST = 255
} GstGLPlatform;
typedef struct _GstGLWindow GstGLWindow; typedef struct _GstGLWindow GstGLWindow;
typedef struct _GstGLWindowPrivate GstGLWindowPrivate; typedef struct _GstGLWindowPrivate GstGLWindowPrivate;
typedef struct _GstGLWindowClass GstGLWindowClass; typedef struct _GstGLWindowClass GstGLWindowClass;
...@@ -98,15 +86,16 @@ struct _GstGLWindowClass { ...@@ -98,15 +86,16 @@ struct _GstGLWindowClass {
/*< private >*/ /*< private >*/
GObjectClass parent_class; GObjectClass parent_class;
guintptr (*get_gl_context) (GstGLWindow *window); guintptr (*get_gl_context) (GstGLWindow *window);
gboolean (*activate) (GstGLWindow *window, gboolean activate); GstGLAPI (*get_gl_api) (GstGLWindow *window);
void (*set_window_handle) (GstGLWindow *window, guintptr id); gboolean (*activate) (GstGLWindow *window, gboolean activate);
gboolean (*share_context) (GstGLWindow *window, guintptr external_gl_context); void (*set_window_handle) (GstGLWindow *window, guintptr id);
void (*draw_unlocked) (GstGLWindow *window, guint width, guint height); gboolean (*share_context) (GstGLWindow *window, guintptr external_gl_context);
void (*draw) (GstGLWindow *window, guint width, guint height); void (*draw_unlocked) (GstGLWindow *window, guint width, guint height);
void (*run) (GstGLWindow *window); void (*draw) (GstGLWindow *window, guint width, guint height);
void (*quit) (GstGLWindow *window, GstGLWindowCB callback, gpointer data); void (*run) (GstGLWindow *window);
void (*send_message) (GstGLWindow *window, GstGLWindowCB callback, gpointer data); void (*quit) (GstGLWindow *window, GstGLWindowCB callback, gpointer data);
void (*send_message) (GstGLWindow *window, GstGLWindowCB callback, gpointer data);
/*< private >*/ /*< private >*/
gpointer _reserved[GST_PADDING]; gpointer _reserved[GST_PADDING];
...@@ -117,7 +106,7 @@ struct _GstGLWindowClass { ...@@ -117,7 +106,7 @@ struct _GstGLWindowClass {
GQuark gst_gl_window_error_quark (void); GQuark gst_gl_window_error_quark (void);
GType gst_gl_window_get_type (void); GType gst_gl_window_get_type (void);
GstGLWindow * gst_gl_window_new (GstGLRendererAPI render_api, guintptr external_gl_context); GstGLWindow * gst_gl_window_new (GstGLAPI gl_api, guintptr external_gl_context);
void gst_gl_window_set_draw_callback (GstGLWindow *window, GstGLWindowCB callback, gpointer data); void gst_gl_window_set_draw_callback (GstGLWindow *window, GstGLWindowCB callback, gpointer data);
void gst_gl_window_set_resize_callback (GstGLWindow *window, GstGLWindowResizeCB callback, gpointer data); void gst_gl_window_set_resize_callback (GstGLWindow *window, GstGLWindowResizeCB callback, gpointer data);
...@@ -125,7 +114,7 @@ void gst_gl_window_set_close_callback (GstGLWindow *window, GstGLWindowCB ...@@ -125,7 +114,7 @@ void gst_gl_window_set_close_callback (GstGLWindow *window, GstGLWindowCB
void gst_gl_window_set_need_lock (GstGLWindow *window, gboolean need_lock); void gst_gl_window_set_need_lock (GstGLWindow *window, gboolean need_lock);
guintptr gst_gl_window_get_gl_context (GstGLWindow *window); guintptr gst_gl_window_get_gl_context (GstGLWindow *window);
gboolean gst_gl_window_activate (GstGLWindow *window, gboolean activate); gboolean gst_gl_window_activate (GstGLWindow *window, gboolean activate);
void gst_gl_window_set_window_handle (GstGLWindow *window, guintptr handle); void gst_gl_window_set_window_handle (GstGLWindow *window, guintptr handle);
guintptr gst_gl_window_get_window_handle (GstGLWindow *window); guintptr gst_gl_window_get_window_handle (GstGLWindow *window);
void gst_gl_window_draw_unlocked (GstGLWindow *window, guint width, guint height); void gst_gl_window_draw_unlocked (GstGLWindow *window, guint width, guint height);
...@@ -135,6 +124,7 @@ void gst_gl_window_quit (GstGLWindow *window, GstGLWindowCB ...@@ -135,6 +124,7 @@ void gst_gl_window_quit (GstGLWindow *window, GstGLWindowCB
void gst_gl_window_send_message (GstGLWindow *window, GstGLWindowCB callback, gpointer data); void gst_gl_window_send_message (GstGLWindow *window, GstGLWindowCB callback, gpointer data);
GstGLPlatform gst_gl_window_get_platform (GstGLWindow *window); GstGLPlatform gst_gl_window_get_platform (GstGLWindow *window);
GstGLAPI gst_gl_window_get_gl_api (GstGLWindow *window);
GST_DEBUG_CATEGORY_EXTERN (gst_gl_window_debug); GST_DEBUG_CATEGORY_EXTERN (gst_gl_window_debug);
......
...@@ -52,7 +52,8 @@ static void gst_gl_window_wayland_egl_send_message (GstGLWindow * window, ...@@ -52,7 +52,8 @@ static void gst_gl_window_wayland_egl_send_message (GstGLWindow * window,
static void gst_gl_window_wayland_egl_destroy_context (GstGLWindowWaylandEGL * static void gst_gl_window_wayland_egl_destroy_context (GstGLWindowWaylandEGL *
window_egl); window_egl);
static gboolean gst_gl_window_wayland_egl_create_context (GstGLWindowWaylandEGL static gboolean gst_gl_window_wayland_egl_create_context (GstGLWindowWaylandEGL
* window_egl, GstGLRendererAPI render_api, guintptr external_gl_context); * window_egl, GstGLAPI gl_api, guintptr external_gl_context);
GstGLAPI gst_gl_window_wayland_egl_get_gl_api (GstGLWindow * window);
static void gst_gl_window_wayland_egl_finalize (GObject * object); static void gst_gl_window_wayland_egl_finalize (GObject * object);
...@@ -271,6 +272,8 @@ gst_gl_window_wayland_egl_class_init (GstGLWindowWaylandEGLClass * klass) ...@@ -271,6 +272,8 @@ gst_gl_window_wayland_egl_class_init (GstGLWindowWaylandEGLClass * klass)
window_class->quit = GST_DEBUG_FUNCPTR (gst_gl_window_wayland_egl_quit); window_class->quit = GST_DEBUG_FUNCPTR (gst_gl_window_wayland_egl_quit);
window_class->send_message = window_class->send_message =
GST_DEBUG_FUNCPTR (gst_gl_window_wayland_egl_send_message); GST_DEBUG_FUNCPTR (gst_gl_window_wayland_egl_send_message);
window_class->get_gl_api =
GST_DEBUG_FUNCPTR (gst_gl_window_wayland_egl_get_gl_api);
object_class->finalize = gst_gl_window_wayland_egl_finalize; object_class->finalize = gst_gl_window_wayland_egl_finalize;
} }
...@@ -282,8 +285,7 @@ gst_gl_window_wayland_egl_init (GstGLWindowWaylandEGL * window) ...@@ -282,8 +285,7 @@ gst_gl_window_wayland_egl_init (GstGLWindowWaylandEGL * window)
/* Must be called in the gl thread */ /* Must be called in the gl thread */
GstGLWindowWaylandEGL * GstGLWindowWaylandEGL *
gst_gl_window_wayland_egl_new (GstGLRendererAPI render_api, gst_gl_window_wayland_egl_new (GstGLAPI gl_api, guintptr external_gl_context)
guintptr external_gl_context)
{ {
GstGLWindowWaylandEGL *window; GstGLWindowWaylandEGL *window;
...@@ -313,7 +315,7 @@ gst_gl_window_wayland_egl_new (GstGLRendererAPI render_api, ...@@ -313,7 +315,7 @@ gst_gl_window_wayland_egl_new (GstGLRendererAPI render_api,
g_source_attach (window->wl_source, window->main_context); g_source_attach (window->wl_source, window->main_context);
gst_gl_window_wayland_egl_create_context (window, render_api, gst_gl_window_wayland_egl_create_context (window, gl_api,
external_gl_context); external_gl_context);
return window; return window;
...@@ -346,7 +348,7 @@ gst_gl_window_wayland_egl_finalize (GObject * object) ...@@ -346,7 +348,7 @@ gst_gl_window_wayland_egl_finalize (GObject * object)
static gboolean static gboolean
gst_gl_window_wayland_egl_create_context (GstGLWindowWaylandEGL * window_egl, gst_gl_window_wayland_egl_create_context (GstGLWindowWaylandEGL * window_egl,
GstGLRendererAPI render_api, guintptr external_gl_context) GstGLAPI gl_api, guintptr external_gl_context)
{ {
EGLint config_attrib[] = { EGLint config_attrib[] = {
EGL_SURFACE_TYPE, EGL_WINDOW_BIT, EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
...@@ -469,6 +471,12 @@ gst_gl_window_wayland_egl_get_gl_context (GstGLWindow * window) ...@@ -469,6 +471,12 @@ gst_gl_window_wayland_egl_get_gl_context (GstGLWindow * window)
return (guintptr) GST_GL_WINDOW_WAYLAND_EGL (window)->egl_context; return (guintptr) GST_GL_WINDOW_WAYLAND_EGL (window)->egl_context;
} }
GstGLAPI
gst_gl_window_wayland_egl_get_gl_api (GstGLWindow * window)
{
return GST_GL_API_GLES2;
}
static void static void
gst_gl_window_wayland_egl_swap_buffers (GstGLWindow * window) gst_gl_window_wayland_egl_swap_buffers (GstGLWindow * window)
{ {
......
...@@ -25,8 +25,6 @@ ...@@ -25,8 +25,6 @@
#include <wayland-egl.h> #include <wayland-egl.h>
#include <wayland-cursor.h> #include <wayland-cursor.h>
#include <EGL/egl.h>
#include "gstglwindow.h" #include "gstglwindow.h"
G_BEGIN_DECLS G_BEGIN_DECLS
...@@ -99,7 +97,7 @@ struct _GstGLWindowWaylandEGLClass { ...@@ -99,7 +97,7 @@ struct _GstGLWindowWaylandEGLClass {
GType gst_gl_window_wayland_egl_get_type (void); GType gst_gl_window_wayland_egl_get_type (void);
GstGLWindowWaylandEGL * gst_gl_window_wayland_egl_new (GstGLRendererAPI render_api, GstGLWindowWaylandEGL * gst_gl_window_wayland_egl_new (GstGLAPI gl_api,
guintptr external_gl_context); guintptr external_gl_context);
G_END_DECLS G_END_DECLS
......
...@@ -51,7 +51,7 @@ enum ...@@ -51,7 +51,7 @@ enum
struct _GstGLWindowWin32Private struct _GstGLWindowWin32Private
{ {
GstGLRendererAPI render_api; GstGLAPI gl_api;
guintptr external_gl_context; guintptr external_gl_context;
gboolean activate; gboolean activate;
gboolean activate_result; gboolean activate_result;
...@@ -138,8 +138,7 @@ gst_gl_window_win32_init (GstGLWindowWin32 * window) ...@@ -138,8 +138,7 @@ gst_gl_window_win32_init (GstGLWindowWin32 * window)
/* Must be called in the gl thread */ /* Must be called in the gl thread */
GstGLWindowWin32 * GstGLWindowWin32 *
gst_gl_window_win32_new (GstGLRendererAPI render_api, gst_gl_window_win32_new (GstGLAPI gl_api, guintptr external_gl_context)
guintptr external_gl_context)
{ {
GstGLWindowWin32 *window = NULL; GstGLWindowWin32 *window = NULL;
const gchar *user_choice; const gchar *user_choice;
...@@ -149,13 +148,13 @@ gst_gl_window_win32_new (GstGLRendererAPI render_api, ...@@ -149,13 +148,13 @@ gst_gl_window_win32_new (GstGLRendererAPI render_api,
#if HAVE_WGL #if HAVE_WGL
if (!window && (!user_choice || g_strstr_len (user_choice, 3, "wgl"))) if (!window && (!user_choice || g_strstr_len (user_choice, 3, "wgl")))
window = window =
GST_GL_WINDOW_WIN32 (gst_gl_window_win32_wgl_new (render_api, GST_GL_WINDOW_WIN32 (gst_gl_window_win32_wgl_new (gl_api,
external_gl_context)); external_gl_context));
#endif #endif
#if HAVE_EGL #if HAVE_EGL
if (!window && (!user_choice || g_strstr_len (user_choice, 3, "egl"))) if (!window && (!user_choice || g_strstr_len (user_choice, 3, "egl")))
window = window =
GST_GL_WINDOW_WIN32 (gst_gl_window_win32_egl_new (render_api, GST_GL_WINDOW_WIN32 (gst_gl_window_win32_egl_new (gl_api,
external_gl_context)); external_gl_context));
#endif #endif
if (!window) { if (!window) {
...@@ -164,7 +163,7 @@ gst_gl_window_win32_new (GstGLRendererAPI render_api, ...@@ -164,7 +163,7 @@ gst_gl_window_win32_new (GstGLRendererAPI render_api,
return NULL; return NULL;
} }
window->priv->render_api = render_api; window->priv->gl_api = gl_api;
window->priv->external_gl_context = external_gl_context; window->priv->external_gl_context = external_gl_context;
return window; return window;
...@@ -427,7 +426,7 @@ window_proc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) ...@@ -427,7 +426,7 @@ window_proc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
window_class->choose_format (window_win32); window_class->choose_format (window_win32);
window_class->create_context (window_win32, priv->render_api, window_class->create_context (window_win32, priv->gl_api,
priv->external_gl_context); priv->external_gl_context);
/* priv->gl_context = wglCreateContext (priv->device); /* priv->gl_context = wglCreateContext (priv->device);
......
...@@ -74,7 +74,7 @@ struct _GstGLWindowWin32Class { ...@@ -74,7 +74,7 @@ struct _GstGLWindowWin32Class {
GType gst_gl_window_win32_get_type (void); GType gst_gl_window_win32_get_type (void);
GstGLWindowWin32 * gst_gl_window_win32_new (GstGLRendererAPI render_api, GstGLWindowWin32 * gst_gl_window_win32_new (GstGLAPI gl_api,
guintptr external_gl_context); guintptr external_gl_context);
gboolean gst_gl_window_win32_open_device (GstGLWindowWin32 *window_win32); gboolean gst_gl_window_win32_open_device (GstGLWindowWin32 *window_win32);
......
...@@ -36,11 +36,12 @@ static gboolean gst_gl_window_win32_wgl_choose_format (GstGLWindowWin32 * ...@@ -36,11 +36,12 @@ static gboolean gst_gl_window_win32_wgl_choose_format (GstGLWindowWin32 *
static gboolean gst_gl_window_win32_wgl_activate (GstGLWindowWin32 * static gboolean gst_gl_window_win32_wgl_activate (GstGLWindowWin32 *
window_win32, gboolean activate); window_win32, gboolean activate);
static gboolean gst_gl_window_win32_wgl_create_context (GstGLWindowWin32 * static gboolean gst_gl_window_win32_wgl_create_context (GstGLWindowWin32 *
window_win32, GstGLRendererAPI render_api, guintptr external_gl_context); window_win32, GstGLAPI gl_api, guintptr external_gl_context);
static void gst_gl_window_win32_wgl_destroy_context (GstGLWindowWin32 * static void gst_gl_window_win32_wgl_destroy_context (GstGLWindowWin32 *
window_win32); window_win32);
GstGLAPI gst_gl_window_win32_egl_get_gl_api (GstGLWindow * window);
const gchar *EGLErrorString (); const gchar *WinEGLErrorString ();
#define GST_CAT_DEFAULT gst_gl_window_win32_egl_debug #define GST_CAT_DEFAULT gst_gl_window_win32_egl_debug
GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT); GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT);
...@@ -54,20 +55,24 @@ G_DEFINE_TYPE_WITH_CODE (GstGLWindowWin32EGL, gst_gl_window_win32_egl, ...@@ -54,20 +55,24 @@ G_DEFINE_TYPE_WITH_CODE (GstGLWindowWin32EGL, gst_gl_window_win32_egl,
static void static void
gst_gl_window_win32_egl_class_init (GstGLWindowWin32EGLClass * klass) gst_gl_window_win32_egl_class_init (GstGLWindowWin32EGLClass * klass)
{ {
GstGLWindowWin32Class *window_class = (GstGLWindowWin32 *) klass; GstGLWindowClass *window_class = (GstGLWindowClass *) klass;
GstGLWindowWin32Class *window_win32_class = (GstGLWindowWin32 *) klass;
window_win32_class->get_gl_context = window_win32_class->get_gl_context =
GST_DEBUG_FUNCPTR (gst_gl_window_win32_wgl_get_gl_context); GST_DEBUG_FUNCPTR (gst_gl_window_win32_egl_get_gl_context);
window_win32_class->choose_format = window_win32_class->choose_format =
GST_DEBUG_FUNCPTR (gst_gl_window_win32_wgl_choose_format); GST_DEBUG_FUNCPTR (gst_gl_window_win32_egl_choose_format);
window_win32_class->activate = window_win32_class->activate =
GST_DEBUG_FUNCPTR (gst_gl_window_win32_wgl_activate); GST_DEBUG_FUNCPTR (gst_gl_window_win32_egl_activate);
window_win32_class->create_context = window_win32_class->create_context =
GST_DEBUG_FUNCPTR (gst_gl_window_win32_wgl_create_context); GST_DEBUG_FUNCPTR (gst_gl_window_win32_egl_create_context);
window_win32_class->destroy_context = window_win32_class->destroy_context =
GST_DEBUG_FUNCPTR (gst_gl_window_win32_wgl_destroy_context); GST_DEBUG_FUNCPTR (gst_gl_window_win32_egl_destroy_context);
window_win32_class->swap_buffers = window_win32_class->swap_buffers =
GST_DEBUG_FUNCPTR (gst_gl_window_win32_wgl_swap_buffers); GST_DEBUG_FUNCPTR (gst_gl_window_win32_egl_swap_buffers);
window_class->get_gl_api =
GST_DEBUG_FUNCPTR (gst_gl_window_win32_egl_get_gl_api);
} }
static void static void
...@@ -77,8 +82,7 @@ gst_gl_window_win32_egl_init (GstGLWindow * window) ...@@ -77,8 +82,7 @@ gst_gl_window_win32_egl_init (GstGLWindow * window)
/* Must be called in the gl thread */ /* Must be called in the gl thread */
GstGLWindowWin32EGL * GstGLWindowWin32EGL *
gst_gl_window_win32_egl_new (GstGLRendererAPI render_api, gst_gl_window_win32_egl_new (GstGLAPI gl_api, guintptr external_gl_context)
guintptr external_gl_context)
{ {
GstGLWindowWin32EGL *window = GstGLWindowWin32EGL *window =
g_object_new (GST_GL_TYPE_WINDOW_WIN32_EGL, NULL); g_object_new (GST_GL_TYPE_WINDOW_WIN32_EGL, NULL);
...@@ -115,7 +119,7 @@ gst_gl_window_win32_egl_activate (GstGLWindowWin32 * window_win32, ...@@ -115,7 +119,7 @@ gst_gl_window_win32_egl_activate (GstGLWindowWin32 * window_win32,
static gboolean static gboolean
gst_gl_window_win32_egl_create_context (GstGLWindowWin32 * window_win32, gst_gl_window_win32_egl_create_context (GstGLWindowWin32 * window_win32,
GstGLRendererAPI render_api, guintptr external_gl_context) GstGLAPI gl_api, guintptr external_gl_context)
{ {
GstGLWindowWin32EGL *window_egl; GstGLWindowWin32EGL *window_egl;
EGLint majorVersion; EGLint majorVersion;
...@@ -142,7 +146,7 @@ gst_gl_window_win32_egl_create_context (GstGLWindowWin32 * window_win32, ...@@ -142,7 +146,7 @@ gst_gl_window_win32_egl_create_context (GstGLWindowWin32 * window_win32,
if (priv->display != EGL_NO_DISPLAY) if (priv->display != EGL_NO_DISPLAY)
GST_DEBUG ("display retrieved: %d\n", window_egl->display); GST_DEBUG ("display retrieved: %d\n", window_egl->display);
else { else {
GST_DEBUG ("failed to retrieve display %s\n", EGLErrorString ()); GST_DEBUG ("failed to retrieve display %s\n", WinEGLErrorString ());
goto failure; goto failure;
} }
...@@ -150,7 +154,7 @@ gst_gl_window_win32_egl_create_context (GstGLWindowWin32 * window_win32, ...@@ -150,7 +154,7 @@ gst_gl_window_win32_egl_create_context (GstGLWindowWin32 * window_win32,
GST_DEBUG ("egl initialized: %d.%d\n", majorVersion, minorVersion); GST_DEBUG ("egl initialized: %d.%d\n", majorVersion, minorVersion);
else { else {
GST_DEBUG ("failed to initialize egl %d, %s\n", priv->display, GST_DEBUG ("failed to initialize egl %d, %s\n", priv->display,
EGLErrorString ()); WinEGLErrorString ());
goto failure; goto failure;
} }
...@@ -158,7 +162,7 @@ gst_gl_window_win32_egl_create_context (GstGLWindowWin32 * window_win32, ...@@ -158,7 +162,7 @@ gst_gl_window_win32_egl_create_context (GstGLWindowWin32 * window_win32,
GST_DEBUG ("configs retrieved: %d\n", numConfigs); GST_DEBUG ("configs retrieved: %d\n", numConfigs);
else { else {
GST_DEBUG ("failed to retrieve configs %d, %s\n", window_egl->display, GST_DEBUG ("failed to retrieve configs %d, %s\n", window_egl->display,
EGLErrorString ()); WinEGLErrorString ());
goto failure; goto failure;
} }
...@@ -166,7 +170,7 @@ gst_gl_window_win32_egl_create_context (GstGLWindowWin32 * window_win32, ...@@ -166,7 +170,7 @@ gst_gl_window_win32_egl_create_context (GstGLWindowWin32 * window_win32,
GST_DEBUG ("config set: %d, %d\n", config, numConfigs); GST_DEBUG ("config set: %d, %d\n", config, numConfigs);
else { else {