diff options
author | Jean-Philippe Andre <jp.andre@samsung.com> | 2015-11-06 15:28:12 +0900 |
---|---|---|
committer | Jean-Philippe Andre <jp.andre@samsung.com> | 2015-11-06 17:16:28 +0900 |
commit | b8c179605ec4b6e7a85137029724d1d59cd00361 (patch) | |
tree | fb231522acba7d4b23630cf71c191a56fc5e6ba8 | |
parent | b78c218522ac14166ee8e077e596e7032747ddb0 (diff) | |
download | efl-b8c179605ec4b6e7a85137029724d1d59cd00361.tar.gz |
Evas GL: Fix linking to 'context_restore_set'
There was a terribly complex mechanism to call this function
from the gl_x11 engine to gl_common (evas gl core)... and it
simply didn't work because the function pointer would be NULL.
-rw-r--r-- | src/modules/evas/engines/gl_common/evas_gl_common.h | 1 | ||||
-rw-r--r-- | src/modules/evas/engines/gl_common/evas_gl_core.c | 4 | ||||
-rw-r--r-- | src/modules/evas/engines/gl_common/evas_gl_core.h | 1 | ||||
-rw-r--r-- | src/modules/evas/engines/gl_x11/evas_engine.c | 2 | ||||
-rw-r--r-- | src/modules/evas/engines/gl_x11/evas_engine.h | 2 | ||||
-rw-r--r-- | src/modules/evas/engines/gl_x11/evas_x_main.c | 12 |
6 files changed, 14 insertions, 8 deletions
diff --git a/src/modules/evas/engines/gl_common/evas_gl_common.h b/src/modules/evas/engines/gl_common/evas_gl_common.h index 118bf9f5e3..115ca28e2a 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_common.h +++ b/src/modules/evas/engines/gl_common/evas_gl_common.h @@ -872,6 +872,5 @@ _comp_tex_sub_2d(Evas_Engine_GL_Context *gc, int x, int y, int w, int h, int fmt extern Eina_Bool _need_context_restore; extern void _context_restore(void); -EAPI void evas_gl_context_restore_set(Eina_Bool enable); #endif diff --git a/src/modules/evas/engines/gl_common/evas_gl_core.c b/src/modules/evas/engines/gl_common/evas_gl_core.c index 6a03ac31b7..ef012cf3c5 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_core.c +++ b/src/modules/evas/engines/gl_common/evas_gl_core.c @@ -2954,8 +2954,8 @@ evgl_direct_partial_render_end() } } -void -evas_gl_context_restore_set(Eina_Bool enable) +EAPI void +evas_gl_common_context_restore_set(Eina_Bool enable) { _need_context_restore = enable; } diff --git a/src/modules/evas/engines/gl_common/evas_gl_core.h b/src/modules/evas/engines/gl_common/evas_gl_core.h index 7c321e2d3f..8939cdbb53 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_core.h +++ b/src/modules/evas/engines/gl_common/evas_gl_core.h @@ -47,6 +47,7 @@ EAPI void evgl_engine_shutdown(void *eng_data); EAPI void *evgl_native_surface_buffer_get(EVGL_Surface *sfc, Eina_Bool *is_egl_image); EAPI int evgl_native_surface_yinvert_get(EVGL_Surface *sfc); EAPI void *evgl_current_native_context_get(EVGL_Context *ctx); +EAPI void evas_gl_common_context_restore_set(Eina_Bool); typedef void (*EVGL_Engine_Call)(void *eng_data); typedef void *(*EVGL_Native_Surface_Call)(void *sfc, Eina_Bool *is_egl_image); diff --git a/src/modules/evas/engines/gl_x11/evas_engine.c b/src/modules/evas/engines/gl_x11/evas_engine.c index d0a7de7b30..9723e1fc38 100644 --- a/src/modules/evas/engines/gl_x11/evas_engine.c +++ b/src/modules/evas/engines/gl_x11/evas_engine.c @@ -75,7 +75,6 @@ glsym_func_void glsym_evas_gl_common_shaders_flush = NULL; glsym_func_void glsym_evas_gl_common_error_set = NULL; glsym_func_int glsym_evas_gl_common_error_get = NULL; glsym_func_void_ptr glsym_evas_gl_common_current_context_get = NULL; -void (*glsym_evas_gl_context_restore_set) (Eina_Bool enable) = NULL; #ifdef GL_GLES @@ -1233,7 +1232,6 @@ gl_symbols(void) LINK2GENERIC(evas_gl_common_error_get); LINK2GENERIC(evas_gl_common_error_set); LINK2GENERIC(evas_gl_common_current_context_get); - LINK2GENERIC(evas_gl_context_restore_set); LINK2GENERIC(evas_gl_common_shaders_flush); #ifdef GL_GLES diff --git a/src/modules/evas/engines/gl_x11/evas_engine.h b/src/modules/evas/engines/gl_x11/evas_engine.h index 1c214ce687..3ef4054e10 100644 --- a/src/modules/evas/engines/gl_x11/evas_engine.h +++ b/src/modules/evas/engines/gl_x11/evas_engine.h @@ -219,6 +219,4 @@ Eina_Bool __glXMakeContextCurrent(Display *disp, GLXDrawable glxwin, GLXContext context); #endif -extern void (*glsym_evas_gl_context_restore_set) (Eina_Bool enable); - #endif 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 d2a0617dda..d6073aad8e 100644 --- a/src/modules/evas/engines/gl_x11/evas_x_main.c +++ b/src/modules/evas/engines/gl_x11/evas_x_main.c @@ -1,11 +1,15 @@ #include "evas_engine.h" #include "../gl_common/evas_gl_define.h" +#include <dlfcn.h> -# define SET_RESTORE_CONTEXT() do { if (glsym_evas_gl_context_restore_set) glsym_evas_gl_context_restore_set(EINA_TRUE); } while(0) +# define SET_RESTORE_CONTEXT() do { if (glsym_evas_gl_common_context_restore_set) glsym_evas_gl_common_context_restore_set(EINA_TRUE); } while(0) static Eina_TLS _outbuf_key = 0; static Eina_TLS _context_key = 0; +typedef void (*glsym_func_void) (); +glsym_func_void glsym_evas_gl_common_context_restore_set = NULL; + #ifdef GL_GLES typedef EGLContext GLContext; typedef EGLConfig GLConfig; @@ -38,6 +42,12 @@ eng_init(void) if (initted) return EINA_TRUE; +#define LINK2GENERIC(sym) \ + glsym_##sym = dlsym(RTLD_DEFAULT, #sym); \ + if (!glsym_##sym) ERR("Could not find function '%s'", #sym); + + LINK2GENERIC(evas_gl_common_context_restore_set); + // FIXME: These resources are never released if (!eina_tls_new(&_outbuf_key)) goto error; |