| gl_sources = [ |
| 'gstglapi.c', |
| 'gstglbasefilter.c', |
| 'gstglbasememory.c', |
| 'gstglcolorconvert.c', |
| 'gstglbuffer.c', |
| 'gstglbufferpool.c', |
| 'gstglcontext.c', |
| 'gstgldebug.c', |
| 'gstgldisplay.c', |
| 'gstglfeature.c', |
| 'gstglfilter.c', |
| 'gstglformat.c', |
| 'gstglframebuffer.c', |
| 'gstglmemory.c', |
| 'gstglmemorypbo.c', |
| 'gstgloverlaycompositor.c', |
| 'gstglquery.c', |
| 'gstglrenderbuffer.c', |
| 'gstglshader.c', |
| 'gstglshaderstrings.c', |
| 'gstglsl.c', |
| 'gstglslstage.c', |
| 'gstglsyncmeta.c', |
| 'gstglupload.c', |
| 'gstglutils.c', |
| 'gstglviewconvert.c', |
| 'gstglwindow.c', |
| ] |
| |
| gl_headers = [ |
| 'gl.h', |
| 'gl-prelude.h', |
| 'gstgl_enums.h', |
| 'gstgl_fwd.h', |
| 'gstglapi.h', |
| 'gstglbasefilter.h', |
| 'gstglbasememory.h', |
| 'gstglbuffer.h', |
| 'gstglbufferpool.h', |
| 'gstglcolorconvert.h', |
| 'gstglcontext.h', |
| 'gstgldebug.h', |
| 'gstgldisplay.h', |
| 'gstglfeature.h', |
| 'gstglfilter.h', |
| 'gstglformat.h', |
| 'gstglfuncs.h', |
| 'gstglframebuffer.h', |
| 'gstglmemory.h', |
| 'gstglmemorypbo.h', |
| 'gstgloverlaycompositor.h', |
| 'gstglquery.h', |
| 'gstglrenderbuffer.h', |
| 'gstglshader.h', |
| 'gstglshaderstrings.h', |
| 'gstglsl.h', |
| 'gstglslstage.h', |
| 'gstglsyncmeta.h', |
| 'gstglupload.h', |
| 'gstglutils.h', |
| 'gstglviewconvert.h', |
| 'gstglwindow.h', |
| ] |
| |
| gl_prototype_headers = [ |
| 'glprototypes/all_functions.h', |
| 'glprototypes/base.h', |
| 'glprototypes/blending.h', |
| 'glprototypes/buffers.h', |
| 'glprototypes/debug.h', |
| 'glprototypes/eglimage.h', |
| 'glprototypes/fbo.h', |
| 'glprototypes/fixedfunction.h', |
| 'glprototypes/gles.h', |
| 'glprototypes/gstgl_compat.h', |
| 'glprototypes/gstgl_gles2compat.h', |
| 'glprototypes/opengl.h', |
| 'glprototypes/query.h', |
| 'glprototypes/shaders.h', |
| 'glprototypes/sync.h', |
| 'glprototypes/vao.h', |
| ] |
| |
| gl_x11_headers = [] |
| gl_wayland_headers = [] |
| gl_win32_headers = [] |
| gl_cocoa_headers = [] |
| gl_egl_headers = [] |
| |
| glconf = configuration_data() |
| glconf_options = [ |
| 'GST_GL_HAVE_OPENGL', |
| 'GST_GL_HAVE_GLES2', |
| 'GST_GL_HAVE_GLES3', |
| 'GST_GL_HAVE_GLES3EXT3_H', |
| |
| 'GST_GL_HAVE_WINDOW_X11', |
| 'GST_GL_HAVE_WINDOW_COCOA', |
| 'GST_GL_HAVE_WINDOW_WIN32', |
| 'GST_GL_HAVE_WINDOW_WAYLAND', |
| 'GST_GL_HAVE_WINDOW_ANDROID', |
| 'GST_GL_HAVE_WINDOW_DISPMANX', |
| 'GST_GL_HAVE_WINDOW_EAGL', |
| 'GST_GL_HAVE_WINDOW_VIV_FB', |
| 'GST_GL_HAVE_WINDOW_GBM', |
| |
| 'GST_GL_HAVE_PLATFORM_EGL', |
| 'GST_GL_HAVE_PLATFORM_GLX', |
| 'GST_GL_HAVE_PLATFORM_WGL', |
| 'GST_GL_HAVE_PLATFORM_CGL', |
| 'GST_GL_HAVE_PLATFORM_EAGL', |
| |
| 'GST_GL_HAVE_DMABUF', |
| 'GST_GL_HAVE_VIV_DIRECTVIV', |
| |
| 'GST_GL_HAVE_GLEGLIMAGEOES', |
| 'GST_GL_HAVE_GLCHAR', |
| 'GST_GL_HAVE_GLSIZEIPTR', |
| 'GST_GL_HAVE_GLINTPTR', |
| 'GST_GL_HAVE_GLSYNC', |
| 'GST_GL_HAVE_GLUINT64', |
| 'GST_GL_HAVE_GLINT64', |
| 'GST_GL_HAVE_EGLATTRIB', |
| 'GST_GL_HAVE_EGLUINT64KHR', |
| ] |
| |
| foreach option : glconf_options |
| glconf.set10(option, false) |
| endforeach |
| |
| gmodule_dep = dependency('gmodule-no-export-2.0', |
| fallback: ['glib', 'libgmodule_dep']) |
| unneeded_dep = dependency('', required : false) |
| if unneeded_dep.found() |
| error ('Found unfindable dependency') |
| endif |
| |
| # OpenGL/GLES2 libraries |
| gl_lib_deps = [] |
| # GL platform - EGL, GLX, CGL, WGL, etc |
| gl_platform_deps = [] |
| # GL winsys - wayland, X11, Cocoa, win32, etc |
| gl_winsys_deps = [] |
| # other things we need. |
| gl_misc_deps = [] |
| # Other preprocessor arguments |
| gl_cpp_args = ['-DGST_EXPORTS'] |
| |
| enabled_gl_apis = [] |
| enabled_gl_platforms = [] |
| enabled_gl_winsys = [] |
| |
| # parse provided options |
| libegl_module_name = get_option('with_egl_module_name') |
| if libegl_module_name != '' |
| gl_cpp_args += ['-DGST_GL_LIBEGL_MODULE_NAME="@0@"'.format(libegl_module_name)] |
| endif |
| libgles2_module_name = get_option('with_gles2_module_name') |
| if libgles2_module_name != '' |
| gl_cpp_args += ['-DGST_GL_LIBGLESV2_MODULE_NAME="@0@"'.format(libgles2_module_name)] |
| endif |
| libgl_module_name = get_option('with_opengl_module_name') |
| if libgl_module_name != '' |
| gl_cpp_args += ['-DGST_GL_LIBGL_MODULE_NAME="@0@"'.format(libgl_module_name)] |
| endif |
| |
| gl_apis_s = get_option ('with_gl_api') |
| if gl_apis_s == 'auto' |
| need_api_opengl = 'auto' |
| need_api_gles2 = 'auto' |
| else |
| need_api_opengl = 'no' |
| need_api_gles2 = 'no' |
| gl_apis = gl_apis_s.split(',') |
| foreach api : gl_apis |
| if api == 'opengl' |
| need_api_opengl = 'yes' |
| elif api == 'gles2' |
| need_api_gles2 = 'yes' |
| else |
| error('Unsupported GL api provided ' + api) |
| endif |
| endforeach |
| endif |
| |
| gl_platforms_s = get_option ('with_gl_platform') |
| if gl_platforms_s == 'auto' |
| need_platform_egl = 'auto' |
| need_platform_glx = 'auto' |
| need_platform_cgl = 'auto' |
| need_platform_wgl = 'auto' |
| need_platform_eagl = 'auto' |
| else |
| need_platform_egl = 'no' |
| need_platform_glx = 'no' |
| need_platform_cgl = 'no' |
| need_platform_wgl = 'no' |
| need_platform_eagl = 'no' |
| gl_platforms = gl_platforms_s.split(',') |
| foreach platform : gl_platforms |
| if platform == 'egl' |
| need_platform_egl = 'yes' |
| elif platform == 'glx' |
| need_platform_glx = 'yes' |
| # elif platform == 'cgl' |
| # need_platform_cgl = 'yes' |
| elif platform == 'wgl' |
| need_platform_wgl = 'yes' |
| # elif platform == 'eagl' |
| # need_platform_eagl = 'yes' |
| else |
| error('Unsupported GL platform provided ' + platform) |
| endif |
| endforeach |
| endif |
| |
| gl_winsys_s = get_option ('with_gl_winsys') |
| if gl_winsys_s == 'auto' |
| need_win_x11 = 'auto' |
| need_win_wayland = 'auto' |
| need_win_win32 = 'auto' |
| need_win_cocoa = 'auto' |
| need_win_eagl = 'auto' |
| need_win_dispmanx = 'auto' |
| need_win_viv_fb = 'auto' |
| need_win_gbm = 'auto' |
| else |
| need_win_x11 = 'no' |
| need_win_wayland = 'no' |
| need_win_win32 = 'no' |
| need_win_cocoa = 'no' |
| need_win_eagl = 'no' |
| need_win_dispmanx = 'no' |
| need_win_viv_fb = 'no' |
| need_win_gbm = 'no' |
| gl_winsys = gl_winsys_s.split(',') |
| foreach winsys : gl_winsys |
| if winsys == 'x11' |
| need_win_x11 = 'yes' |
| elif winsys == 'wayland' |
| need_win_wayland = 'yes' |
| elif winsys == 'win32' |
| need_win_win32 = 'yes' |
| # elif winsys == 'cocoa' |
| # need_win_cocoa = 'yes' |
| # elif winsys == 'eagl' |
| # need_win_eagl = 'yes' |
| elif winsys == 'dispmanx' |
| need_win_dispmanx = 'yes' |
| elif winsys == 'viv-fb' |
| need_win_viv_fb = 'yes' |
| elif winsys == 'gbm' |
| need_win_gbm = 'no' |
| else |
| error('Unsupported GL winsys provided ' + winsys) |
| endif |
| endforeach |
| endif |
| |
| gl_include_header = ''' |
| #ifdef __GNUC__ |
| # pragma GCC diagnostic push |
| # pragma GCC diagnostic ignored "-Wredundant-decls" |
| #endif |
| #ifndef GL_GLEXT_PROTOTYPES |
| #define GL_GLEXT_PROTOTYPES 1 |
| #endif |
| ''' |
| |
| # Desktop OpenGL checks |
| gl_dep = unneeded_dep |
| glx_dep = unneeded_dep |
| if need_api_opengl != 'no' or need_platform_glx != 'no' |
| gl_dep = dependency('gl', required : false) |
| if not gl_dep.found() |
| if host_machine.system() == 'windows' |
| gl_dep = cc.find_library('opengl32', required : false) |
| # elif host_machine.system() == 'darwin' |
| # gl_dep = cc.find_library('OpenGL', required : false) |
| else |
| gl_dep = cc.find_library('GL', required : false) |
| endif |
| |
| if not cc.has_header('GL/gl.h') |
| gl_dep = unneeded_dep |
| endif |
| |
| if not gl_dep.found() and need_api_opengl == 'yes' |
| error ('Could not find requested OpenGL library') |
| endif |
| endif |
| |
| glx_dep = gl_dep |
| if need_api_opengl == 'no' |
| gl_dep = unneeded_dep |
| endif |
| if need_platform_glx == 'no' |
| glx_dep = unneeded_dep |
| endif |
| |
| opengl_includes = ''' |
| #ifdef __APPLE__ |
| # include <OpenGL/OpenGL.h> |
| # include <OpenGL/gl.h> |
| # if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070 |
| # define GL_DO_NOT_WARN_IF_MULTI_GL_VERSION_HEADERS_INCLUDED |
| # include <OpenGL/gl3.h> |
| # endif |
| #else |
| # if _MSC_VER |
| # include <windows.h> |
| # endif |
| # include <GL/gl.h> |
| # if __WIN32__ || _WIN32 |
| # include <GL/glext.h> |
| # endif |
| #endif |
| ''' |
| endif |
| |
| # GLES2 checks |
| gles2_dep = unneeded_dep |
| gles3_h = false |
| gles3ext3_h = false |
| if need_api_gles2 != 'no' |
| gles2_dep = dependency('glesv2', required : false) |
| if not gles2_dep.found() |
| # if host_machine.system() == 'windows' |
| # elif host_machine.system() == 'darwin' |
| # gles2_dep = cc.find_library('GLESv2', required : false) |
| # else |
| gles2_dep = cc.find_library('GLESv2', required : false) |
| # endif |
| |
| if not cc.has_header('GLES2/gl2.h') |
| gles2_dep = unneeded_dep |
| endif |
| |
| if not gles2_dep.found() and need_api_gles2 == 'yes' |
| error ('Could not find requested OpenGL ES library') |
| endif |
| endif |
| |
| gles3_h = gles2_dep.found() and cc.has_header('GLES3/gl3.h', dependencies : gles2_dep) |
| |
| gles_includes = ''' |
| #ifdef HAVE_IOS /* FIXME */ |
| # include <OpenGLES/ES2/gl.h> |
| # include <OpenGLES/ES2/glext.h> |
| #else''' |
| if gles3_h |
| gles3ext3_h = gles3_h and cc.has_header('GLES3/gl3ext.h', dependencies : gles2_dep) |
| gles_includes += ''' |
| # include <GLES3/gl3.h> |
| # include <GLES2/gl2ext.h>''' |
| if gles3ext3_h |
| gles_includes += ''' |
| # include <GLES3/gl3ext.h>''' |
| endif |
| else |
| gles_includes += ''' |
| # include <GLES2/gl2.h> |
| # include <GLES2/gl2ext.h>''' |
| endif |
| gles_includes += ''' |
| #endif |
| ''' |
| endif |
| |
| # can we include both gles2 and opengl headers? |
| if gles2_dep.found() and gl_dep.found() |
| gl_include_block = gl_include_header + gles_includes + opengl_includes |
| # TODO: Revert to passing gl_include_block via prefix: once |
| # https://github.com/mesonbuild/meson/issues/2364 is fixed |
| if not cc.compiles(gl_include_block + '\n' + 'void f (void) {}',dependencies : [gles2_dep, gl_dep]) |
| message ('Cannot include both OpenGL and OpenGL ES headers') |
| if need_api_gles2 != 'yes' |
| gles2_dep = unneeded_dep |
| elif need_api_opengl != 'yes' |
| gl_dep = unneeded_dep |
| else |
| error('Both OpenGL and OpenGL ES were requested but cannot be included together') |
| endif |
| endif |
| endif |
| gl_include_block = gl_include_header |
| if gles2_dep.found() |
| gl_include_block += gles_includes |
| endif |
| if gl_dep.found() |
| gl_include_block += opengl_includes |
| endif |
| |
| if gles2_dep.found() |
| gl_lib_deps += gles2_dep |
| glconf.set10('GST_GL_HAVE_GLES2', 1) |
| if gles3_h |
| glconf.set10('GST_GL_HAVE_GLES3', 1) |
| if gles3ext3_h |
| glconf.set10('GST_GL_HAVE_GLES3EXT3_H', 1) |
| endif |
| endif |
| enabled_gl_apis += 'gles2' |
| endif |
| |
| if gl_dep.found() |
| gl_lib_deps += gl_dep |
| glconf.set10('GST_GL_HAVE_OPENGL', 1) |
| enabled_gl_apis += 'opengl' |
| endif |
| |
| # EGL checks |
| egl_dep = unneeded_dep |
| if need_platform_egl != 'no' |
| egl_dep = dependency('egl', required : false) |
| if not egl_dep.found() |
| egl_dep = cc.find_library('EGL', required : false) |
| |
| if not egl_dep.found() and need_platform_egl == 'yes' |
| error ('Could not find requested EGL library') |
| endif |
| endif |
| |
| if egl_dep.found() |
| gl_sources += [ |
| 'egl/gstegl.c', |
| 'egl/gsteglimage.c', |
| 'egl/gstglcontext_egl.c', |
| 'egl/gstgldisplay_egl.c', |
| 'egl/gstglmemoryegl.c', |
| ] |
| gl_egl_headers += [ |
| 'egl/gstegl.h', |
| 'egl/gsteglimage.h', |
| 'egl/gstgldisplay_egl.h', |
| 'egl/gstglmemoryegl.h', |
| ] |
| gl_platform_deps += egl_dep |
| glconf.set10('GST_GL_HAVE_PLATFORM_EGL', 1) |
| |
| if cc.has_header('libdrm/drm_fourcc.h') |
| gl_misc_deps += allocators_dep |
| glconf.set10('GST_GL_HAVE_DMABUF', 1) |
| endif |
| |
| egl_includes = ''' |
| #include <EGL/egl.h> |
| #include <EGL/eglext.h> |
| ''' |
| enabled_gl_platforms += 'egl' |
| endif |
| |
| endif |
| |
| # wayland checks |
| wayland_client_dep = unneeded_dep |
| wayland_cursor_dep = unneeded_dep |
| wayland_egl_dep = unneeded_dep |
| if need_win_wayland != 'no' |
| if need_win_wayland == 'yes' |
| if need_platform_egl == 'no' |
| error('Impossible situation requested: Cannot use Wayland without EGL support') |
| endif |
| endif |
| if not egl_dep.found() |
| if need_win_wayland == 'yes' |
| error ('Could not find EGL libraries for wayland') |
| else |
| message ('Could not find EGL libraries for wayland') |
| endif |
| else |
| wayland_client_dep = dependency('wayland-client', version : '>= 1.0', required : false) |
| wayland_cursor_dep = dependency('wayland-cursor', version : '>= 1.0', required : false) |
| wayland_egl_dep = dependency('wayland-egl', version : '>= 1.0', required : false) |
| |
| if wayland_client_dep.found() and wayland_cursor_dep.found() and wayland_egl_dep.found() |
| gl_sources += [ |
| 'wayland/gstgldisplay_wayland.c', |
| 'wayland/gstglwindow_wayland_egl.c', |
| 'wayland/wayland_event_source.c', |
| ] |
| gl_wayland_headers += [ |
| 'wayland/gstgldisplay_wayland.h' |
| ] |
| glconf.set('GST_GL_HAVE_WINDOW_WAYLAND', 1) |
| gl_winsys_deps += [wayland_client_dep, wayland_cursor_dep, wayland_egl_dep] |
| enabled_gl_winsys += 'wayland' |
| else |
| if need_win_wayland == 'yes' |
| error ('Could not find requested Wayland libraries') |
| endif |
| wayland_client_dep = unneeded_dep |
| wayland_cursor_dep = unneeded_dep |
| wayland_egl_dep = unneeded_dep |
| endif |
| endif |
| endif |
| |
| # X11 checks |
| if need_platform_glx == 'yes' |
| if need_win_x11 == 'no' |
| error('Impossible situation requested: Cannot use GLX without X11 support') |
| elif need_api_opengl == 'no' |
| error('Impossible situation requested: Cannot use GLX without the OpenGL library') |
| endif |
| endif |
| |
| if need_win_x11 != 'no' |
| xcb_dep = dependency('x11-xcb', required : false) |
| if x11_dep.found() and xcb_dep.found() |
| gl_sources += [ |
| 'x11/gstgldisplay_x11.c', |
| 'x11/gstglwindow_x11.c', |
| 'x11/xcb_event_source.c', |
| ] |
| gl_x11_headers += [ |
| 'x11/gstgldisplay_x11.h', |
| ] |
| glconf.set('GST_GL_HAVE_WINDOW_X11', 1) |
| gl_winsys_deps += [x11_dep, xcb_dep] |
| enabled_gl_winsys += 'x11' |
| |
| if need_platform_glx != 'no' and glx_dep.found() |
| glconf.set('GST_GL_HAVE_PLATFORM_GLX', 1) |
| gl_sources += [ |
| 'x11/gstglcontext_glx.c', |
| ] |
| # GLX is in the opengl library on linux |
| gl_platform_deps += glx_dep |
| enabled_gl_platforms += 'glx' |
| endif |
| elif need_win_x11 == 'yes' |
| error ('Could not find requested X11 libraries') |
| endif |
| endif |
| |
| bcm_host_dep = unneeded_dep |
| if need_win_dispmanx != 'no' |
| |
| # Try pkg-config for bcm_host then fallback to find_library to also |
| # support older distribution |
| bcm_host_dep = dependency('bcm_host', required : false) |
| if not bcm_host_dep.found() |
| bcm_host_dep = cc.find_library('bcm_host', required : false) |
| endif |
| |
| if bcm_host_dep.found() |
| if not egl_dep.found() |
| error('dispmanx requires the use of egl') |
| endif |
| |
| gl_sources += [ |
| 'dispmanx/gstglwindow_dispmanx_egl.c' |
| ] |
| |
| glconf.set('GST_GL_HAVE_WINDOW_DISPMANX', 1) |
| gl_winsys_deps += bcm_host_dep |
| enabled_gl_winsys += 'dispmanx' |
| gl_cpp_args += ['-DUSE_EGL_RPI'] |
| elif need_win_dispmanx == 'yes' |
| error('Could not find dispmanx libraries') |
| endif |
| endif |
| |
| # win32 checks |
| if need_platform_wgl == 'yes' |
| if need_win_win32 == 'no' |
| error('Impossible situation requested: Cannot use WGL without the win32 window system') |
| endif |
| endif |
| |
| # XXX: untested |
| if need_platform_wgl != 'no' and need_win_win32 != 'no' |
| gdi_dep = cc.find_library('gdi32', required : false) |
| # FIXME: Revert back to has_header once it gains prefix support |
| wglext_h = cc.has_header_symbol('GL/wglext.h', 'WGL_WGLEXT_VERSION', |
| prefix : '''#include <windows.h> |
| #include <GL/gl.h>''') |
| |
| if wglext_h and gdi_dep.found() and gl_dep.found() |
| gl_platform_deps += gdi_dep |
| gl_sources += [ |
| 'win32/win32_message_source.c', |
| 'win32/gstglwindow_win32.c', |
| 'win32/gstglwindow_win32.c', |
| 'win32/gstglcontext_wgl.c', |
| ] |
| enabled_gl_winsys += 'win32' |
| gl_winsys_deps += gdi_dep |
| enabled_gl_platforms += 'wgl' |
| glconf.set('GST_GL_HAVE_WINDOW_WIN32', 1) |
| glconf.set('GST_GL_HAVE_PLATFORM_WGL', 1) |
| endif |
| endif |
| |
| if host_machine.system() == 'darwin' |
| # FIXME: how to know if we're on iOS or OS X? |
| # gl_cocoa_headers += [ |
| # 'gstglcontext_cocoa.h', |
| # 'gstglcaopengllayer.h', |
| # ] |
| endif |
| |
| # GDM Checks |
| gbm_gudev_dep = unneeded_dep |
| gbm_libdrm_dep = unneeded_dep |
| gbm_dep = unneeded_dep |
| if need_win_gbm != 'no' |
| if need_win_gbm == 'yes' |
| if need_platform_egl == 'no' |
| error('Impossible situation requested: Cannot use GBM without EGL support') |
| endif |
| endif |
| |
| gbm_gudev_dep = dependency('gudev-1.0', version : '>=147', required : false) |
| gbm_libdrm_dep = dependency('libdrm', version : '>= 2.4.55', required : false) |
| gbm_dep = dependency('gbm', required : false) |
| if egl_dep.found() and gbm_gudev_dep.found() and gbm_libdrm_dep.found() and gbm_dep.found() |
| gl_sources += [ |
| 'gbm/gstgldisplay_gbm.c', |
| 'gbm/gstgl_gbm_utils.c', |
| 'gbm/gstglwindow_gbm_egl.c', |
| ] |
| enabled_gl_winsys += 'gbm' |
| gl_winsys_deps += [gbm_gudev_dep, gbm_libdrm_dep, gbm_dep] |
| glconf.set('GST_GL_HAVE_WINDOW_GBM', 1) |
| else |
| if need_win_gbm == 'yes' |
| error ('Could not find requested GBM libraries') |
| endif |
| gbm_gudev_dep = unneeded_dep |
| gbm_libdrm_dep = unneeded_dep |
| gbm_dep = unneeded_dep |
| endif |
| endif |
| |
| if need_platform_egl != 'no' and need_win_viv_fb != 'no' |
| if egl_dep.found() and cc.has_function ('fbGetDisplay', dependencies : egl_dep) |
| if cc.has_function ('glTexDirectVIV', dependencies : gles2_dep) |
| enabled_gl_winsys += 'viv-fb' |
| glconf.set10('GST_GL_HAVE_WINDOW_VIV_FB', 1) |
| glconf.set10('GST_GL_HAVE_VIV_DIRECTVIV', 1) |
| gl_sources += [ |
| 'viv-fb/gstgldisplay_viv_fb.c', |
| 'viv-fb/gstglwindow_viv_fb_egl.c', |
| ] |
| gl_cpp_args += ['-DEGL_API_FB'] |
| endif |
| endif |
| endif |
| |
| # TODO: Add rest of gl config here. |
| # iOS, OS X, win32 specific support |
| |
| build_gstgl = true |
| if enabled_gl_apis.length() == 0 |
| message('No OpenGL API libraries found or requested') |
| build_gstgl = false |
| endif |
| if enabled_gl_platforms.length() == 0 |
| message('No OpenGL Platforms found or requested') |
| build_gstgl = false |
| endif |
| if enabled_gl_winsys.length() == 0 |
| message('No OpenGL Window systems found or requested') |
| build_gstgl = false |
| endif |
| |
| if build_gstgl |
| # find some types that may or may not be defined |
| if cc.has_type('GLeglImageOES', prefix : gl_include_block, dependencies : gl_lib_deps) |
| glconf.set('GST_GL_HAVE_GLEGLIMAGEOES', 1) |
| endif |
| if cc.has_type('GLchar', prefix : gl_include_block, dependencies : gl_lib_deps) |
| glconf.set('GST_GL_HAVE_GLCHAR', 1) |
| endif |
| if cc.has_type('GLsizeiptr', prefix : gl_include_block, dependencies : gl_lib_deps) |
| glconf.set('GST_GL_HAVE_GLSIZEIPTR', 1) |
| endif |
| if cc.has_type('GLintptr', prefix : gl_include_block, dependencies : gl_lib_deps) |
| glconf.set('GST_GL_HAVE_GLINTPTR', 1) |
| endif |
| if cc.has_type('GLsync', prefix : gl_include_block, dependencies : gl_lib_deps) |
| glconf.set('GST_GL_HAVE_GLSYNC', 1) |
| endif |
| if cc.has_type('GLuint64', prefix : gl_include_block, dependencies : gl_lib_deps) |
| glconf.set('GST_GL_HAVE_GLUINT64', 1) |
| endif |
| if cc.has_type('GLint64', prefix : gl_include_block, dependencies : gl_lib_deps) |
| glconf.set('GST_GL_HAVE_GLINT64', 1) |
| endif |
| if egl_dep.found() and cc.has_type('EGLAttrib', prefix : gl_include_block + egl_includes, dependencies : gl_lib_deps + [egl_dep]) |
| glconf.set('GST_GL_HAVE_EGLATTRIB', 1) |
| endif |
| if egl_dep.found() and cc.has_type('EGLuint64KHR', prefix : gl_include_block + egl_includes, dependencies : gl_lib_deps + [egl_dep]) |
| glconf.set('GST_GL_HAVE_EGLUINT64KHR', 1) |
| endif |
| |
| message('Building libgstgl with GL api: ' + ' '.join(enabled_gl_apis)) |
| message('Building libgstgl with GL platform: ' + ' '.join(enabled_gl_platforms)) |
| message('Building libgstgl with GL winsys: ' + ' '.join(enabled_gl_winsys)) |
| |
| install_headers(gl_headers, subdir : 'gstreamer-1.0/gst/gl') |
| install_headers(gl_cocoa_headers, subdir : 'gstreamer-1.0/gst/gl/cocoa') |
| install_headers(gl_egl_headers, subdir : 'gstreamer-1.0/gst/gl/egl') |
| install_headers(gl_prototype_headers, subdir : 'gstreamer-1.0/gst/gl/glprototypes') |
| install_headers(gl_x11_headers, subdir : 'gstreamer-1.0/gst/gl/x11') |
| install_headers(gl_wayland_headers, subdir : 'gstreamer-1.0/gst/gl/wayland') |
| |
| configure_file(input : 'gstglconfig.h.meson', |
| output : 'gstglconfig.h', |
| install_dir : get_option('libdir') + '/gstreamer-1.0/include/gst/gl', |
| configuration : glconf) |
| |
| gstgl = library('gstgl-' + api_version, |
| gl_sources, |
| c_args : gst_plugins_base_args + gl_cpp_args, |
| include_directories : [configinc, libsinc], |
| version : libversion, |
| soversion : soversion, |
| install : true, |
| dependencies : [gst_base_dep, video_dep, allocators_dep, gmodule_dep, |
| gl_lib_deps, gl_platform_deps, gl_winsys_deps, gl_misc_deps]) |
| gen_sources = [] |
| if build_gir |
| gl_gir = gnome.generate_gir(gstgl, |
| sources : gl_sources + gl_headers, |
| namespace : 'GstGL', |
| nsversion : api_version, |
| identifier_prefix : 'Gst', |
| symbol_prefix : 'gst', |
| export_packages : 'gstreamer-gl-1.0', |
| includes : ['Gst-1.0', 'GstBase-1.0', 'GstVideo-1.0'], |
| install : true, |
| extra_args : gir_init_section + ['--c-include=gst/gl/gl.h'], |
| dependencies : [video_dep, gst_dep, gst_base_dep] |
| ) |
| gen_sources += gl_gir |
| endif |
| |
| |
| gstgl_dep = declare_dependency(link_with : gstgl, |
| include_directories : [libsinc], |
| sources: gen_sources, |
| dependencies : [video_dep, gst_base_dep] + gl_winsys_deps) |
| endif |