From 5e4b94c1bbf530db49b56915154f4d9fabd09bec Mon Sep 17 00:00:00 2001 From: Julien Isorce Date: Mon, 6 Jul 2015 00:52:06 +0100 Subject: [PATCH] gl: support cgl, egl and glx within a same build On osx, with the same build, gst-launch-1.0 videotestsrc ! glimagesink works with: GST_GL_PLATFORM=egl GST_GL_WINDOW=x11 GST_GL_API=gles2 GST_GL_PLATFORM=egl GST_GL_WINDOW=x11 GST_GL_API=opengl GST_GL_PLATFORM=glx GST_GL_WINDOW=x11 GST_GL_API=opengl GST_GL_PLATFORM=cgl GST_GL_WINDOW=cocoa GST_GL_API=opengl GST_GL_PLATFORM=cgl GST_GL_WINDOW=cocoa GST_GL_API=opengl3 https://bugzilla.gnome.org/show_bug.cgi?id=752743 --- configure.ac | 32 ++++++++++++++++++-------- gst-libs/gst/gl/egl/gstglcontext_egl.c | 30 +++++++++++++++++++++++- gst-libs/gst/gl/gstglapi.h | 2 +- 3 files changed, 52 insertions(+), 12 deletions(-) diff --git a/configure.ac b/configure.ac index 00c7f0728a..1e1ad87de4 100644 --- a/configure.ac +++ b/configure.ac @@ -805,14 +805,14 @@ if test "x$HAVE_GL" = "xyes" -a "x$HAVE_GLES2" = "xyes"; then #ifndef GL_GLEXT_PROTOTYPES #define GL_GLEXT_PROTOTYPES 1 #endif -# ifdef __APPLE__ +# ifdef HAVE_IOS # include # include # else # include # include # endif -# if __APPLE__ +# ifdef __APPLE__ # include # include # if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 @@ -999,12 +999,6 @@ case $host in if test "x$NEED_WGL" = "xyes"; then AC_MSG_ERROR([WGL is not available on Mac OS X]) fi - if test "x$NEED_EGL" = "xyes"; then - AC_MSG_ERROR([EGL is not available on Mac OS X]) - fi - if test "x$NEED_GLES2" = "xyes"; then - AC_MSG_ERROR([OpenGL|ES 2.0 is not supported on your platform yet]) - fi if test "x$NEED_COCOA" != "xno"; then GL_LIBS="$LIBS -framework OpenGL -framework Cocoa -framework QuartzCore -framework CoreFoundation" @@ -1030,6 +1024,24 @@ case $host in USE_OPENGL=yes fi fi + + if test "x$HAVE_EGL" = "xyes"; then + if test "x$NEED_EGL" != "xno"; then + if test "x$HAVE_WINDOW_X11" = "xyes"; then + GL_LIBS="$GL_LIBS -lEGL $EGL_LIBS" + GL_CFLAGS="$GL_CFLAGS $EGL_CFLAGS" + USE_EGL=yes + fi + fi + fi + + dnl OpenGL|ES 2.0 + if test "x$HAVE_GLES2" = "xyes"; then + if test "x$NEED_GLES2" != "xno"; then + GL_LIBS="$GL_LIBS -lGLESv2" + USE_GLES2=yes + fi + fi fi ;; *-mingw32*) @@ -1237,7 +1249,7 @@ if test "x$USE_GLES2" = "xyes"; then #ifndef GL_GLEXT_PROTOTYPES #define GL_GLEXT_PROTOTYPES 1 #endif -# ifdef __APPLE__ +# ifdef HAVE_IOS # include # include # else @@ -1249,7 +1261,7 @@ fi if test "x$USE_OPENGL" = "xyes"; then GL_INCLUDES="$GL_INCLUDES -# if __APPLE__ +# ifdef __APPLE__ # include # include # else diff --git a/gst-libs/gst/gl/egl/gstglcontext_egl.c b/gst-libs/gst/gl/egl/gstglcontext_egl.c index 74ddc7354c..c466a0a68d 100644 --- a/gst-libs/gst/gl/egl/gstglcontext_egl.c +++ b/gst-libs/gst/gl/egl/gstglcontext_egl.c @@ -627,7 +627,35 @@ gst_gl_context_egl_get_proc_address (GstGLAPI gl_api, const gchar * name) gpointer result = NULL; static GOnce g_once = G_ONCE_INIT; - result = gst_gl_context_default_get_proc_address (gl_api, name); +#ifdef __APPLE__ +#if GST_GL_HAVE_OPENGL && !defined(GST_GL_LIBGL_MODULE_NAME) + if (!result && (gl_api & (GST_GL_API_OPENGL | GST_GL_API_OPENGL3))) { + static GModule *module_opengl = NULL; + if (g_once_init_enter (&module_opengl)) { + GModule *setup_module_opengl = + g_module_open ("libGL.dylib", G_MODULE_BIND_LAZY); + g_once_init_leave (&module_opengl, setup_module_opengl); + } + if (module_opengl) + g_module_symbol (module_opengl, name, &result); + } +#endif +#if GST_GL_HAVE_GLES2 && !defined(GST_GL_LIBGLESV2_MODULE_NAME) + if (!result && (gl_api & (GST_GL_API_GLES2))) { + static GModule *module_gles2 = NULL; + if (g_once_init_enter (&module_gles2)) { + GModule *setup_module_gles2 = + g_module_open ("libGLESv2.dylib", G_MODULE_BIND_LAZY); + g_once_init_leave (&module_gles2, setup_module_gles2); + } + if (module_gles2) + g_module_symbol (module_gles2, name, &result); + } +#endif +#endif // __APPLE__ + + if (!result) + result = gst_gl_context_default_get_proc_address (gl_api, name); g_once (&g_once, load_egl_module, NULL); diff --git a/gst-libs/gst/gl/gstglapi.h b/gst-libs/gst/gl/gstglapi.h index 5f162c4603..5ef1c6550d 100644 --- a/gst-libs/gst/gl/gstglapi.h +++ b/gst-libs/gst/gl/gstglapi.h @@ -28,7 +28,7 @@ #ifndef GL_GLEXT_PROTOTYPES #define GL_GLEXT_PROTOTYPES 1 #endif -# ifdef __APPLE__ +# ifdef HAVE_IOS # include # include # else