1 #ifndef COREGL_INTERNAL_H
2 #define COREGL_INTERNAL_H
11 fprintf(stderr, __VA_ARGS__)
14 fprintf(stderr, __VA_ARGS__)
20 fprintf(stderr, __VA_ARGS__)
24 if (!(expr)) { fprintf(stderr, "\E[0;31;1m%s(%d) error. '"#expr"'\E[0m\n", __func__, __LINE__); }
30 typedef GLvoid * GLvoidptr;
31 typedef GLuint GLuintmask;
33 //#define COREGL_TRACE_ALL
34 #define COREGL_TRACE_CONTEXT_INFO
35 #define COREGL_TRACE_STATE_INFO
36 #define COREGL_TRACE_APICALL_INFO
38 #ifdef COREGL_TRACE_ALL
39 #define COREGL_TRACE_CONTEXT_INFO // Context state & thread state & Glue-context info
40 #define COREGL_TRACE_STATE_INFO // Glue-context state info
41 #define COREGL_TRACE_APICALL_INFO // API call frequency info
44 #define _COREGL_TRACE_OUTPUT_INTERVAL_SEC 5
46 // Symbol definition for static
47 #define _COREGL_SYMBOL(IS_EXTENSION, RET_TYPE, FUNC_NAME, PARAM_LIST) extern RET_TYPE (*_sym_##FUNC_NAME) PARAM_LIST;
48 # include "headers/sym.h"
51 // Symbol definition for wrappath
52 #define _COREGL_SYMBOL(IS_EXTENSION, RET_TYPE, FUNC_NAME, PARAM_LIST) extern RET_TYPE (evgl_##FUNC_NAME) PARAM_LIST;
53 # include "headers/sym.h"
56 // Symbol definition for fastpath
57 #define _COREGL_SYMBOL(IS_EXTENSION, RET_TYPE, FUNC_NAME, PARAM_LIST) extern RET_TYPE (fpgl_##FUNC_NAME) PARAM_LIST;
58 # include "headers/sym.h"
61 #define _COREGL_INT_INIT_VALUE -3
65 # define GLERR(fn, fl, ln, op)
67 # define GLERR(fn, fl, ln, op)
71 typedef struct _Trace_Data Trace_Data;
73 #ifdef COREGL_TRACE_APICALL_INFO
74 # define _COREGL_TRACE_API_BEGIN(api) \
76 # define _COREGL_TRACE_API_END(api) \
78 # define _COREGL_TRACE_API_OUTPUT(force_output) \
79 trace_output(force_output);
81 # define _COREGL_TRACE_API_BEGIN(api)
82 # define _COREGL_TRACE_API_END(api)
83 # define _COREGL_TRACE_API_OUTPUT(force_output)
87 #define _COREGL_FAST_FUNC_BEGIN()
89 #define _COREGL_FAST_FUNC_END()
91 #define _COREGL_WRAP_FUNC_BEGIN() \
92 _COREGL_TRACE_API_BEGIN(__func__);
94 #define _COREGL_WRAP_FUNC_END() \
95 _COREGL_TRACE_API_END(__func__);
97 typedef enum _CoreGL_Opt_Flag
105 #ifndef _COREGL_DESKTOP_GL
106 typedef EGLSurface GLSurface;
107 typedef EGLDisplay GLDisplay;
108 typedef EGLContext GLContext;
110 typedef GLXDrawable GLSurface;
111 typedef Display GLDisplay;
112 typedef GLXContext GLContext;
115 typedef struct _GLContextState
123 typedef struct _GLThreadState
126 GLContextState *cstate;
127 GLSurface *rsurf_draw;
128 GLSurface *rsurf_read;
129 Trace_Data **ftd_table;
132 typedef struct _GLContext_List
137 GLContextState *cstate;
138 struct _GLContext_List *next;
141 extern void *glue_lib_handle;
142 extern void *egl_lib_handle;
144 extern GLContext_List *glctx_list;
146 #include "coregl_thread_pthread.h"
147 extern Mutex ctx_list_access_mutex;
149 typedef struct _General_Trace_List
152 struct _General_Trace_List *next;
153 } General_Trace_List;
155 extern General_Trace_List *thread_trace_list;
156 extern Mutex general_trace_lists_access_mutex;
158 extern int trace_api_flag;
160 // Environment functions
161 extern const char *get_env_setting(const char *name);
163 // Main utility functions
164 extern int init_new_thread_state();
167 extern int mutex_lock(Mutex *mt);
168 extern int mutex_unlock(Mutex *mt);
169 extern int get_current_thread();
170 extern int set_current_thread_state(Mutex *mt, GLThreadState *tstate);
171 extern GLThreadState *get_current_thread_state();
174 // Context state functions
175 extern int add_context_state_to_list(const void *data, const int datalen, GLContextState *cstate, Mutex *mtx);
176 extern int remove_context_states_from_list(GLContextState *cstate, Mutex *mtx);
177 extern GLContextState *get_context_state_from_list(const void *data, const int datalen, Mutex *mtx);
180 // Override functions
181 extern void override_glue_normal_path();
182 extern void override_glue_fast_path();
183 extern void override_gl_normal_path();
184 extern void override_gl_fast_path();
185 extern void override_glue_apis(CoreGL_Opt_Flag opt);
186 extern void override_gl_apis(CoreGL_Opt_Flag opt);
189 // Debug & Trace functions
190 extern int add_to_general_trace_list(General_Trace_List **gtl, void *value);
191 extern int remove_from_general_trace_list(General_Trace_List **gtl, void *value);
192 extern void trace_begin(const char *name);
193 extern void trace_end(const char *name);
194 extern void trace_output(int force_output);
196 #endif // COREGL_INTERNAL_H