diff --git a/src/modules/evas/engines/gl_x11/evas_engine.c b/src/modules/evas/engines/gl_x11/evas_engine.c index 4d9cd532f3..7497eb2133 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 a090393bcf..29171b0f22 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 3e425bf052..38e450ce2f 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) {