diff options
author | Jonny Lamb <jonny.lamb@collabora.co.uk> | 2015-03-20 15:26:51 +0100 |
---|---|---|
committer | Bryce Harrington <bryce@osg.samsung.com> | 2015-03-20 13:56:38 -0700 |
commit | 51a7ae5f89e9504f49bd98c7cd714e66c2a35580 (patch) | |
tree | 06acb4561ed8bbfc512eee565907e1f3b0ffdb3c /shared | |
parent | 70eba3fbde63721fab950e12f848b92d652a85ad (diff) | |
download | weston-51a7ae5f89e9504f49bd98c7cd714e66c2a35580.tar.gz |
clients & tests: use eglGetPlatformDisplayEXT when supported
Reviewed-by: Derek Foreman <derekf@osg.samsung.com>
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
Diffstat (limited to 'shared')
-rw-r--r-- | shared/platform.h | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/shared/platform.h b/shared/platform.h new file mode 100644 index 00000000..7f847fa2 --- /dev/null +++ b/shared/platform.h @@ -0,0 +1,79 @@ +/* + * Copyright © 2015 Collabora, Ltd. + * + * Permission to use, copy, modify, distribute, and sell this software and + * its documentation for any purpose is hereby granted without fee, provided + * that the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the copyright holders not be used in + * advertising or publicity pertaining to distribution of the software + * without specific, written prior permission. The copyright holders make + * no representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + * + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS + * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY + * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER + * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF + * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef WESTON_PLATFORM_H +#define WESTON_PLATFORM_H + +#include <string.h> + +#include <EGL/egl.h> +#include <EGL/eglext.h> + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef EGL_EXT_platform_base +static PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display_ext = NULL; + +#ifndef EGL_PLATFORM_WAYLAND_KHR +#define EGL_PLATFORM_WAYLAND_KHR 0x31D8 +#endif +#endif /* EGL_EXT_platform_base */ + +static inline void +weston_platform_get_egl_proc_addresses(void) +{ +#ifdef EGL_EXT_platform_base + if (!get_platform_display_ext) { + const char *extensions = eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS); + + if (strstr(extensions, "EGL_EXT_platform_wayland") + || strstr(extensions, "EGL_KHR_platform_wayland")) { + get_platform_display_ext = + (void *) eglGetProcAddress("eglGetPlatformDisplayEXT"); + } + } +#endif +} + +static inline EGLDisplay +weston_platform_get_egl_display(EGLenum platform, void *native_display, + const EGLint *attrib_list) +{ +#ifdef EGL_EXT_platform_base + if (!get_platform_display_ext) + weston_platform_get_egl_proc_addresses(); + + if (get_platform_display_ext) + return get_platform_display_ext(platform, + native_display, attrib_list); + else +#endif + return eglGetDisplay((EGLNativeDisplayType) native_display); +} + +#ifdef __cplusplus +} +#endif + +#endif /* WESTON_PLATFORM_H */ |