EGL: add CheckClientExt() helper
authorRémi Denis-Courmont <remi@remlab.net>
Sun, 3 Nov 2013 10:31:29 +0000 (12:31 +0200)
committerRémi Denis-Courmont <remi@remlab.net>
Sun, 3 Nov 2013 14:22:10 +0000 (16:22 +0200)
Checks support for a EGL client extension.

modules/video_output/egl.c

index dc0fa64..46dcac6 100644 (file)
@@ -79,27 +79,35 @@ static void ReleaseCurrent (vlc_gl_t *);
 static void SwapBuffers (vlc_gl_t *);
 static void *GetSymbol(vlc_gl_t *, const char *);
 
 static void SwapBuffers (vlc_gl_t *);
 static void *GetSymbol(vlc_gl_t *, const char *);
 
-static bool CheckAPI (EGLDisplay dpy, const char *api)
+static bool CheckToken(const char *haystack, const char *needle)
 {
 {
-    const char *apis = eglQueryString (dpy, EGL_CLIENT_APIS);
-    size_t apilen = strlen (api);
+    size_t len = strlen(needle);
 
 
-    /* Cannot use strtok_r() on constant string... */
-    do
+    while (haystack != NULL)
     {
     {
-        while (*apis == ' ')
-            apis++;
-        if (!strncmp (apis, api, apilen)
-          && (memchr (" ", apis[apilen], 2) != NULL))
+        while (*haystack == ' ')
+            haystack++;
+        if (!strncmp(haystack, needle, len)
+         && (memchr(" ", haystack[len], 2) != NULL))
             return true;
 
             return true;
 
-        apis = strchr (apis, ' ');
+        haystack = strchr(haystack, ' ');
     }
     }
-    while (apis != NULL);
-
     return false;
 }
 
     return false;
 }
 
+static bool CheckAPI (EGLDisplay dpy, const char *api)
+{
+    const char *apis = eglQueryString (dpy, EGL_CLIENT_APIS);
+    return CheckToken(apis, api);
+}
+
+static bool CheckClientExt(const char *name)
+{
+    const char *exts = eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS);
+    return CheckToken(exts, name);
+}
+
 struct gl_api
 {
    const char name[10];
 struct gl_api
 {
    const char name[10];