3 #include "eglglobals.h"
6 struct _egl_global _eglGlobal
= { .Initialized
= EGL_FALSE
};
10 * Init the fields in the _eglGlobal struct
11 * May be safely called more than once.
16 if (!_eglGlobal
.Initialized
) {
17 _eglGlobal
.Displays
= _eglNewHashTable();
18 _eglGlobal
.Surfaces
= _eglNewHashTable();
19 _eglGlobal
.FreeScreenHandle
= 1;
20 _eglGlobal
.Initialized
= EGL_TRUE
;
22 _eglGlobal
.ClientAPIsMask
= 0x0;
25 _eglGlobal
.ThreadInfo
= _eglNewThreadInfo();
31 * Should call this via an atexit handler.
34 _eglDestroyGlobals(void)
36 /* XXX TODO walk over table entries, deleting each */
37 _eglDeleteHashTable(_eglGlobal
.Displays
);
38 _eglDeleteHashTable(_eglGlobal
.Surfaces
);
43 * Allocate and init a new _EGLThreadInfo object.
46 _eglNewThreadInfo(void)
48 _EGLThreadInfo
*t
= (_EGLThreadInfo
*) calloc(1, sizeof(_EGLThreadInfo
));
50 t
->CurrentContext
= EGL_NO_CONTEXT
;
51 t
->LastError
= EGL_SUCCESS
;
52 t
->CurrentAPI
= EGL_NONE
;
59 * Delete/free a _EGLThreadInfo object.
62 _eglDeleteThreadData(_EGLThreadInfo
*t
)
70 * Return pointer to calling thread's _EGLThreadInfo object.
71 * Create a new one if needed.
72 * Should never return NULL.
75 _eglGetCurrentThread(void)
80 return _eglGlobal
.ThreadInfo
;
85 * Record EGL error code.
88 _eglError(EGLint errCode
, const char *msg
)
90 _EGLThreadInfo
*t
= _eglGetCurrentThread();
93 if (t
->LastError
== EGL_SUCCESS
) {
94 t
->LastError
= errCode
;
103 case EGL_BAD_ATTRIBUTE
:
104 s
= "EGL_BAD_ATTRIBUTE";
107 s
= "EGL_BAD_CONFIG";
109 case EGL_BAD_CONTEXT
:
110 s
= "EGL_BAD_CONTEXT";
112 case EGL_BAD_CURRENT_SURFACE
:
113 s
= "EGL_BAD_CURRENT_SURFACE";
115 case EGL_BAD_DISPLAY
:
116 s
= "EGL_BAD_DISPLAY";
121 case EGL_BAD_NATIVE_PIXMAP
:
122 s
= "EGL_BAD_NATIVE_PIXMAP";
124 case EGL_BAD_NATIVE_WINDOW
:
125 s
= "EGL_BAD_NATIVE_WINDOW";
127 case EGL_BAD_PARAMETER
:
128 s
= "EGL_BAD_PARAMETER";
130 case EGL_BAD_SURFACE
:
131 s
= "EGL_BAD_SURFACE";
133 case EGL_BAD_SCREEN_MESA
:
134 s
= "EGL_BAD_SCREEN_MESA";
136 case EGL_BAD_MODE_MESA
:
137 s
= "EGL_BAD_MODE_MESA";
143 fprintf(stderr
, "EGL user error 0x%x (%s) in %s\n", errCode
, s
, msg
);