[PATCH weston 09/10] platform: remove global variables

Jonny Lamb jonny.lamb at collabora.co.uk
Tue Mar 24 05:12:08 PDT 2015


Reviewed-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
---
 shared/platform.h | 55 +++++++++++++++++++++++++++++--------------------------
 1 file changed, 29 insertions(+), 26 deletions(-)

diff --git a/shared/platform.h b/shared/platform.h
index ea5980e..be6d8e6 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,
-- 
2.1.4



More information about the wayland-devel mailing list