diff options
author | Jonny Lamb <jonny.lamb@collabora.co.uk> | 2015-03-23 17:27:58 +0100 |
---|---|---|
committer | Jonny Lamb <jonny.lamb@collabora.co.uk> | 2015-03-24 12:09:49 +0100 |
commit | aaa3517e7ddd23d7b5306767f6d5b028d2471cb6 (patch) | |
tree | cfb7c3a97f8ac1d7702ae661144bef14471235e3 | |
parent | 46724a9aa6b796c4b98d2bedf0d8d9a89c4c99a3 (diff) |
platform: remove global variables
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
-rw-r--r-- | shared/platform.h | 55 |
1 files changed, 29 insertions, 26 deletions
diff --git a/shared/platform.h b/shared/platform.h index ea5980eb..be6d8e6e 100644 --- a/shared/platform.h +++ b/shared/platform.h @@ -45,35 +45,33 @@ typedef void (*PFNEGLGETPLATFORMDISPLAYEXTPROC) (void); typedef void (*PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC) (void); #endif -static PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display_ext = NULL; -static PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC create_platform_window_surface_ext = NULL; - -static inline void -weston_platform_get_egl_proc_addresses(void) +static inline void * +weston_platform_get_egl_proc_address(const char *address) { - 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"); - create_platform_window_surface_ext = - (void *) eglGetProcAddress("eglCreatePlatformWindowSurfaceEXT"); - } + const char *extensions = eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS); + + if (strstr(extensions, "EGL_EXT_platform_wayland") + || strstr(extensions, "EGL_KHR_platform_wayland")) { + return (void *) eglGetProcAddress(address); } + + return NULL; } static inline EGLDisplay weston_platform_get_egl_display(EGLenum platform, void *native_display, const EGLint *attrib_list) { - if (!get_platform_display_ext) - weston_platform_get_egl_proc_addresses(); + static PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display = NULL; - if (get_platform_display_ext) - return get_platform_display_ext(platform, - native_display, attrib_list); + if (!get_platform_display) { + get_platform_display = weston_platform_get_egl_proc_address( + "eglGetPlatformDisplayEXT"); + } + + if (get_platform_display) + return get_platform_display(platform, + native_display, attrib_list); return eglGetDisplay((EGLNativeDisplayType) native_display); } @@ -83,13 +81,18 @@ weston_platform_create_egl_window(EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list) { - if (!create_platform_window_surface_ext) - weston_platform_get_egl_proc_addresses(); + static PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC + create_platform_window = NULL; + + if (!create_platform_window) { + create_platform_window = weston_platform_get_egl_proc_address( + "eglCreatePlatformWindowSurfaceEXT"); + } - if (create_platform_window_surface_ext) - return create_platform_window_surface_ext(dpy, config, - native_window, - attrib_list); + if (create_platform_window) + return create_platform_window(dpy, config, + native_window, + attrib_list); return eglCreateWindowSurface(dpy, config, (EGLNativeWindowType) native_window, |