3 #include "eglglobals.h"
5 struct _egl_global _eglGlobal
=
11 * Init the fields in the _eglGlobal struct
12 * May be safely called more than once.
17 if (!_eglGlobal
.Initialized
) {
18 _eglGlobal
.Displays
= _eglNewHashTable();
19 _eglGlobal
.Surfaces
= _eglNewHashTable();
20 _eglGlobal
.FreeScreenHandle
= 1;
21 _eglGlobal
.Initialized
= EGL_TRUE
;
23 _eglGlobal
.ClientAPIsMask
= 0x0;
26 _eglGlobal
.ThreadInfo
= _eglNewThreadInfo();
32 * Should call this via an atexit handler.
35 _eglDestroyGlobals(void)
37 /* XXX TODO walk over table entries, deleting each */
38 _eglDeleteHashTable(_eglGlobal
.Displays
);
39 _eglDeleteHashTable(_eglGlobal
.Surfaces
);
44 * Allocate and init a new _EGLThreadInfo object.
47 _eglNewThreadInfo(void)
49 _EGLThreadInfo
*t
= (_EGLThreadInfo
*) calloc(1, sizeof(_EGLThreadInfo
));
51 t
->CurrentContext
= EGL_NO_CONTEXT
;
52 t
->LastError
= EGL_SUCCESS
;
53 t
->CurrentAPI
= EGL_OPENGL_ES_API
; /* default, per EGL spec */
60 * Delete/free a _EGLThreadInfo object.
63 _eglDeleteThreadData(_EGLThreadInfo
*t
)
71 * Return pointer to calling thread's _EGLThreadInfo object.
72 * Create a new one if needed.
73 * Should never return NULL.
76 _eglGetCurrentThread(void)
81 return _eglGlobal
.ThreadInfo
;
86 * Record EGL error code.
89 _eglError(EGLint errCode
, const char *msg
)
91 _EGLThreadInfo
*t
= _eglGetCurrentThread();
94 if (t
->LastError
== EGL_SUCCESS
) {
95 t
->LastError
= errCode
;
104 case EGL_BAD_ATTRIBUTE
:
105 s
= "EGL_BAD_ATTRIBUTE";
108 s
= "EGL_BAD_CONFIG";
110 case EGL_BAD_CONTEXT
:
111 s
= "EGL_BAD_CONTEXT";
113 case EGL_BAD_CURRENT_SURFACE
:
114 s
= "EGL_BAD_CURRENT_SURFACE";
116 case EGL_BAD_DISPLAY
:
117 s
= "EGL_BAD_DISPLAY";
122 case EGL_BAD_NATIVE_PIXMAP
:
123 s
= "EGL_BAD_NATIVE_PIXMAP";
125 case EGL_BAD_NATIVE_WINDOW
:
126 s
= "EGL_BAD_NATIVE_WINDOW";
128 case EGL_BAD_PARAMETER
:
129 s
= "EGL_BAD_PARAMETER";
131 case EGL_BAD_SURFACE
:
132 s
= "EGL_BAD_SURFACE";
134 case EGL_BAD_SCREEN_MESA
:
135 s
= "EGL_BAD_SCREEN_MESA";
137 case EGL_BAD_MODE_MESA
:
138 s
= "EGL_BAD_MODE_MESA";
144 fprintf(stderr
, "EGL user error 0x%x (%s) in %s\n", errCode
, s
, msg
);