jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=69fa047048db79832ee30d5c9a213ea206387937

commit 69fa047048db79832ee30d5c9a213ea206387937
Author: Dongyeon Kim <dy5....@samsung.com>
Date:   Mon Mar 23 17:17:37 2015 -0700

    evas/gl_x11: Separate gl symbols check
    
    Summary:
    There is a restriction for some gpu drivers that
    eglGetProcAddress must be called after eglMakeCurrent.
    So separate egl/glx extensions check from gl_symbols
    to be called inside eng_window_new.
    
    Test Plan: egl and glx backend tests
    
    Reviewers: cedric, jpeg
    
    Subscribers: cedric, mer.kim, wonsik
    
    Differential Revision: https://phab.enlightenment.org/D2193
---
 src/modules/evas/engines/gl_x11/evas_engine.c | 34 +++++++++++++++++++++++----
 src/modules/evas/engines/gl_x11/evas_engine.h |  1 +
 src/modules/evas/engines/gl_x11/evas_x_main.c |  1 +
 3 files changed, 32 insertions(+), 4 deletions(-)

diff --git a/src/modules/evas/engines/gl_x11/evas_engine.c 
b/src/modules/evas/engines/gl_x11/evas_engine.c
index 4d9cd53..7497eb2 100644
--- a/src/modules/evas/engines/gl_x11/evas_engine.c
+++ b/src/modules/evas/engines/gl_x11/evas_engine.c
@@ -1293,6 +1293,36 @@ gl_symbols(void)
    FINDSYM(glsym_eglGetProcAddress, "eglGetProcAddressEXT", glsym_func_eng_fn);
    FINDSYM(glsym_eglGetProcAddress, "eglGetProcAddressARB", glsym_func_eng_fn);
    FINDSYM(glsym_eglGetProcAddress, "eglGetProcAddress", glsym_func_eng_fn);
+#else
+#define FINDSYM(dst, sym, typ) \
+   if (glsym_glXGetProcAddress) { \
+      if (!dst) dst = (typ)glsym_glXGetProcAddress(sym); \
+   } else { \
+      if (!dst) dst = (typ)dlsym(RTLD_DEFAULT, sym); \
+   }
+
+   FINDSYM(glsym_glXGetProcAddress, "glXGetProcAddressEXT", glsym_func_eng_fn);
+   FINDSYM(glsym_glXGetProcAddress, "glXGetProcAddressARB", glsym_func_eng_fn);
+   FINDSYM(glsym_glXGetProcAddress, "glXGetProcAddress", glsym_func_eng_fn);
+#endif
+
+   done = 1;
+}
+
+void
+eng_gl_symbols(void)
+{
+   static int done = 0;
+
+   if (done) return;
+
+#ifdef GL_GLES
+#define FINDSYM(dst, sym, typ) \
+   if (glsym_eglGetProcAddress) { \
+      if (!dst) dst = (typ)glsym_eglGetProcAddress(sym); \
+   } else { \
+      if (!dst) dst = (typ)dlsym(RTLD_DEFAULT, sym); \
+   }
 
    glsym_evas_gl_symbols((void*)glsym_eglGetProcAddress);
 
@@ -1321,10 +1351,6 @@ gl_symbols(void)
       if (!dst) dst = (typ)dlsym(RTLD_DEFAULT, sym); \
    }
 
-   FINDSYM(glsym_glXGetProcAddress, "glXGetProcAddressEXT", glsym_func_eng_fn);
-   FINDSYM(glsym_glXGetProcAddress, "glXGetProcAddressARB", glsym_func_eng_fn);
-   FINDSYM(glsym_glXGetProcAddress, "glXGetProcAddress", glsym_func_eng_fn);
-
    glsym_evas_gl_symbols((void*)glsym_glXGetProcAddress);
 
    FINDSYM(glsym_glXBindTexImage, "glXBindTexImageEXT", glsym_func_void);
diff --git a/src/modules/evas/engines/gl_x11/evas_engine.h 
b/src/modules/evas/engines/gl_x11/evas_engine.h
index a090393..29171b0 100644
--- a/src/modules/evas/engines/gl_x11/evas_engine.h
+++ b/src/modules/evas/engines/gl_x11/evas_engine.h
@@ -198,6 +198,7 @@ Evas_Engine_GL_Context *eng_outbuf_gl_context_get(Outbuf 
*ob);
 void *eng_outbuf_egl_display_get(Outbuf *ob);
 
 Eina_Bool eng_preload_make_current(void *data, void *doit);
+void eng_gl_symbols(void);
 
 static inline int
 _re_wincheck(Outbuf *ob)
diff --git a/src/modules/evas/engines/gl_x11/evas_x_main.c 
b/src/modules/evas/engines/gl_x11/evas_x_main.c
index 3e425bf..38e450c 100644
--- a/src/modules/evas/engines/gl_x11/evas_x_main.c
+++ b/src/modules/evas/engines/gl_x11/evas_x_main.c
@@ -463,6 +463,7 @@ try_gles2:
    gw->detected.msaa = val;
 #endif
 
+   eng_gl_symbols();
    gw->gl_context = glsym_evas_gl_common_context_new();
    if (!gw->gl_context)
      {

-- 


Reply via email to