9 #include "coregl_internal.h"
10 #include "coregl_export.h"
14 int driver_gl_version=COREGL_GLAPI_2;
15 static int api_gl_version=COREGL_GLAPI_2;
17 #ifndef _COREGL_VENDOR_EGL_LIB_PATH
18 #define _COREGL_VENDOR_EGL_LIB_PATH "/usr/lib/driver/libEGL.so" /* DEFAULT EGL PATH */
21 #ifndef _COREGL_VENDOR_GL_LIB_PATH
22 #define _COREGL_VENDOR_GL_LIB_PATH "/usr/lib/driver/libGLESv2.so" /* DEFAULT GL PATH */
25 // Symbol definition for real
26 #define _COREGL_SYMBOL(RET_TYPE, FUNC_NAME, PARAM_LIST) RET_TYPE (*_sym_##FUNC_NAME) PARAM_LIST;
27 #include "headers/sym.h"
31 get_env_setting(const char *name)
34 static char *fp_default = "\0";
35 fp_env = secure_getenv(name);
36 if (fp_env == NULL) fp_env = fp_default;
41 cleanup_current_thread_state()
43 GLThreadState *tstate = NULL;
45 tstate = get_current_thread_state();
49 COREGL_LOG("[COREGL] de-init thread state \n");
50 deinit_modules_tstate(tstate);
51 remove_from_general_trace_list(&thread_trace_list, tstate);
56 set_current_thread_state(NULL);
60 init_new_thread_state()
63 GLThreadState *tstate = NULL;
65 tstate = get_current_thread_state();
68 tstate = (GLThreadState *)calloc(1, sizeof(GLThreadState));
69 /* Prevent CID : 395855 */
70 if (tstate == NULL) goto finish;
71 tstate->thread_id = get_current_thread();
72 add_to_general_trace_list(&thread_trace_list, tstate);
74 init_modules_tstate(tstate);
75 set_current_thread_state(tstate);
87 COREGL_ERR("GL symbol missing! Check client version!\n");
90 #define FINDSYM(libhandle, getproc, dst, sym) \
91 if(api_gl_version <= driver_gl_version) { \
92 if (!dst || (void *)dst == (void *)_sym_missing) \
93 if (getproc) dst = (__typeof__(dst))getproc(sym); \
94 if (!dst || (void *)dst == (void *)_sym_missing) \
95 dst = (__typeof__(dst))dlsym(libhandle, sym); \
96 if (!dst) dst = (__typeof__(dst))_sym_missing;\
103 #define _COREGL_START_API(version) api_gl_version = version;
104 #define _COREGL_END_API(version) api_gl_version = COREGL_GLAPI_2;
105 #define _COREGL_SYMBOL(RET_TYPE, FUNC_NAME, PARAM_LIST) \
106 FINDSYM(egl_lib_handle, _sym_eglGetProcAddress, _sym_##FUNC_NAME, #FUNC_NAME);
107 #define _COREGL_EXT_SYMBOL_ALIAS(FUNC_NAME, ALIAS_NAME) \
108 FINDSYM(egl_lib_handle, _sym_eglGetProcAddress, _sym_##ALIAS_NAME, #FUNC_NAME);
110 #include "headers/sym_egl.h"
112 #undef _COREGL_EXT_SYMBOL_ALIAS
113 #undef _COREGL_SYMBOL
114 #undef _COREGL_START_API
115 #undef _COREGL_END_API
124 #define _COREGL_START_API(version) api_gl_version = version;
125 #define _COREGL_END_API(version) api_gl_version = COREGL_GLAPI_2;
126 #define _COREGL_SYMBOL(RET_TYPE, FUNC_NAME, PARAM_LIST) \
127 FINDSYM(gl_lib_handle, _sym_eglGetProcAddress, _sym_##FUNC_NAME, #FUNC_NAME);
128 #define _COREGL_EXT_SYMBOL_ALIAS(FUNC_NAME, ALIAS_NAME) \
129 FINDSYM(gl_lib_handle, _sym_eglGetProcAddress, _sym_##ALIAS_NAME, #FUNC_NAME);
131 #include "headers/sym_gl.h"
133 #undef _COREGL_EXT_SYMBOL_ALIAS
134 #undef _COREGL_SYMBOL
135 #undef _COREGL_START_API
136 #undef _COREGL_END_API
144 COREGL_API void coregl_symbol_exported()
146 COREGL_ERR("\E[40;31;1mInvalid library link! (Check linkage of libCOREGL)\E[0m\n");
152 //------------------------------------------------//
153 // Open EGL Library as EGL is separate
154 egl_lib_handle = dlopen(_COREGL_VENDOR_EGL_LIB_PATH, RTLD_LAZY | RTLD_LOCAL);
157 COREGL_ERR("\E[40;31;1m%s\E[0m\n\n", dlerror());
158 COREGL_ERR("\E[40;31;1mInvalid library link! (Check linkage of libCOREGL -> %s)\E[0m\n", _COREGL_VENDOR_EGL_LIB_PATH);
162 // test for invalid linking egl
163 if (dlsym(egl_lib_handle, "coregl_symbol_exported"))
165 COREGL_ERR("\E[40;31;1mInvalid library link! (Check linkage of libCOREGL -> %s)\E[0m\n", _COREGL_VENDOR_EGL_LIB_PATH);
169 // use gl_lib handle for GL symbols
170 gl_lib_handle = dlopen(_COREGL_VENDOR_GL_LIB_PATH, RTLD_LAZY | RTLD_LOCAL);
173 COREGL_ERR("\E[40;31;1m%s\E[0m\n\n", dlerror());
174 COREGL_ERR("\E[40;31;1mInvalid library link! (Check linkage of libCOREGL -> %s)\E[0m\n", _COREGL_VENDOR_GL_LIB_PATH);
178 // test for invalid linking gl
179 if (dlsym(gl_lib_handle, "coregl_symbol_exported"))
181 COREGL_ERR("\E[40;31;1mInvalid library link! (Check linkage of libCOREGL -> %s)\E[0m\n", _COREGL_VENDOR_GL_LIB_PATH);
185 // test for a GLES 3.0 symbol
186 if (dlsym(gl_lib_handle, "glReadBuffer"))
188 COREGL_LOG("[CoreGL] Driver GL version 3.0 \n");
189 driver_gl_version = COREGL_GLAPI_3;
191 COREGL_LOG("[CoreGL] Driver GL version 2.0 \n");
194 //------------------------------------------------//
196 if (!_glue_sym_init()) return 0;
197 if (!_gl_sym_init()) return 0;
205 if (egl_lib_handle) dlclose(egl_lib_handle);
206 if (gl_lib_handle) dlclose(gl_lib_handle);
214 COREGL_LOG("[CoreGL] <%d> (%s) Library initializing...", getpid(), _COREGL_COMPILE_DATE);
216 if (!_gl_lib_init()) return 0;
220 COREGL_LOG(" -> Completed\n");
227 __attribute__((destructor))
231 if (export_initialized != 0)