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
.Contexts
= _eglNewHashTable();
19 _eglGlobal
.Surfaces
= _eglNewHashTable();
20 _eglGlobal
.FreeScreenHandle
= 1;
21 _eglGlobal
.Initialized
= EGL_TRUE
;
23 _eglGlobal
.OpenGLESAPISupported
= EGL_TRUE
;
24 _eglGlobal
.OpenVGAPISupported
= EGL_FALSE
;
27 _eglGlobal
.ThreadInfo
= _eglNewThreadInfo();
33 * Should call this via an atexit handler.
36 _eglDestroyGlobals(void)
38 /* XXX TODO walk over table entries, deleting each */
39 _eglDeleteHashTable(_eglGlobal
.Displays
);
40 _eglDeleteHashTable(_eglGlobal
.Contexts
);
41 _eglDeleteHashTable(_eglGlobal
.Surfaces
);
46 * Allocate and init a new _EGLThreadInfo object.
49 _eglNewThreadInfo(void)
51 _EGLThreadInfo
*t
= (_EGLThreadInfo
*) calloc(1, sizeof(_EGLThreadInfo
));
53 t
->CurrentContext
= EGL_NO_CONTEXT
;
54 t
->LastError
= EGL_SUCCESS
;
55 t
->CurrentAPI
= EGL_NONE
;
62 * Delete/free a _EGLThreadInfo object.
65 _eglDeleteThreadData(_EGLThreadInfo
*t
)
73 * Return pointer to calling thread's _EGLThreadInfo object.
74 * Create a new one if needed.
75 * Should never return NULL.
78 _eglGetCurrentThread(void)
83 return _eglGlobal
.ThreadInfo
;
88 * Record EGL error code.
91 _eglError(EGLint errCode
, const char *msg
)
93 _EGLThreadInfo
*t
= _eglGetCurrentThread();
96 if (t
->LastError
== EGL_SUCCESS
) {
97 t
->LastError
= errCode
;
101 s
= "EGL_BAD_ACCESS";
106 case EGL_BAD_ATTRIBUTE
:
107 s
= "EGL_BAD_ATTRIBUTE";
110 s
= "EGL_BAD_CONFIG";
112 case EGL_BAD_CONTEXT
:
113 s
= "EGL_BAD_CONTEXT";
115 case EGL_BAD_CURRENT_SURFACE
:
116 s
= "EGL_BAD_CURRENT_SURFACE";
118 case EGL_BAD_DISPLAY
:
119 s
= "EGL_BAD_DISPLAY";
124 case EGL_BAD_NATIVE_PIXMAP
:
125 s
= "EGL_BAD_NATIVE_PIXMAP";
127 case EGL_BAD_NATIVE_WINDOW
:
128 s
= "EGL_BAD_NATIVE_WINDOW";
130 case EGL_BAD_PARAMETER
:
131 s
= "EGL_BAD_PARAMETER";
133 case EGL_BAD_SURFACE
:
134 s
= "EGL_BAD_SURFACE";
136 case EGL_BAD_SCREEN_MESA
:
137 s
= "EGL_BAD_SCREEN_MESA";
139 case EGL_BAD_MODE_MESA
:
140 s
= "EGL_BAD_MODE_MESA";
146 fprintf(stderr
, "EGL user error 0x%x (%s) in %s\n", errCode
, s
, msg
);