mesa/src/egl/main
Chia-I Wu 56d2119280 egl: Initialize current thread management on demand.
Current thread management was initialized in _eglInitGlobals, which is
called only in eglGetDisplay.  Since EGL does not require eglGetDisplay
to be called first, the initialization is better to be done on demand.

_eglFiniCurrent is removed, as it is not called at all.

Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
2009-08-11 22:14:35 -06:00
..
Makefile egl: Add eglmutex.h. 2009-08-11 22:14:35 -06:00
README.txt egl: some basic docs for libEGL 2008-06-11 19:35:52 -06:00
eglapi.c egl: Return the same EGL Display for the same native display. 2009-07-17 11:53:39 -06:00
eglapi.h egl: new eglGetProcAddress() code 2008-05-30 14:50:33 -06:00
eglcompiler.h egl: Silence warnings on x86-64. 2009-07-31 07:30:13 -06:00
eglconfig.c egl: Silence warnings on x86-64. 2009-07-31 07:30:13 -06:00
eglconfig.h mesa: standardize on C99's uint*_t instead of u_int*_t 2008-09-21 09:45:00 -07:00
eglconfigutil.c egl: Comment out unused tables in_eglFillInConfigs 2009-07-28 08:55:43 -06:00
eglconfigutil.h egl: don't include stdint.h on Windows 2008-08-05 08:13:50 -06:00
eglcontext.c egl: Make eglMakeCurrent more robust. 2009-08-03 11:35:14 -06:00
eglcontext.h egl: Replace IsBound by a pointer to the binding. 2009-08-03 11:34:37 -06:00
eglcurrent.c egl: Initialize current thread management on demand. 2009-08-11 22:14:35 -06:00
eglcurrent.h egl: Initialize current thread management on demand. 2009-08-11 22:14:35 -06:00
egldefines.h egl: make sure EGL_VERSION_STRING query returns same version as eglInitialize() 2008-05-28 15:43:41 -06:00
egldisplay.c egl: Silence warnings on x86-64. 2009-07-31 07:30:13 -06:00
egldisplay.h egl: Silence warnings on x86-64. 2009-07-31 07:30:13 -06:00
egldriver.c egl: Destroy display's resources upon termination. 2009-07-17 11:54:06 -06:00
egldriver.h egl: implment EGL_LARGEST_PBUFFER query 2008-06-20 10:20:25 -06:00
eglglobals.c egl: Initialize current thread management on demand. 2009-08-11 22:14:35 -06:00
eglglobals.h egl: Use the link functions to manage resources. 2009-07-17 11:53:03 -06:00
eglhash.c
eglhash.h
egllog.c egl: fixes for Windows 2008-08-06 16:37:49 -06:00
egllog.h
eglmisc.c egl: clean up prototype code, new _eglFindAPIs() function. 2008-06-19 16:26:20 -06:00
eglmisc.h egl: move a few small functions into new eglmisc.[ch] files 2008-05-28 15:50:58 -06:00
eglmode.c
eglmode.h assorted changes to compile with new EGL 1.4 headers (untested) 2008-05-27 13:45:41 -06:00
eglmutex.h egl: Add eglmutex.h. 2009-08-11 22:14:35 -06:00
eglscreen.c egl: Use the link functions to manage resources. 2009-07-17 11:53:03 -06:00
eglscreen.h
eglstring.c egl: added eglstring.[ch] 2008-05-28 12:54:33 -06:00
eglstring.h egl: added eglstring.[ch] 2008-05-28 12:54:33 -06:00
eglsurface.c egl: Correct the default values of surface attributes. 2009-08-03 11:35:44 -06:00
eglsurface.h egl: Replace IsBound by a pointer to the binding. 2009-08-03 11:34:37 -06:00
egltypedefs.h egl: Add eglcompiler.h for compiler features. 2009-07-17 11:36:45 -06:00
eglx.c egl: switch to egl_glx.so as the default EGL driver for X. 2008-09-26 12:18:59 +01:00
eglx.h x-related EGL code (stub) 2008-05-28 08:42:36 -06:00

README.txt


Notes about the EGL library:


The EGL code here basically consists of two things:

1. An EGL API dispatcher.  This directly routes all the eglFooBar() API
   calls into driver-specific functions.

2. Fallbacks for EGL API functions.  A driver _could_ implement all the
   EGL API calls from scratch.  But in many cases, the fallbacks provided
   in libEGL (such as eglChooseConfig()) will do the job.



Bootstrapping:

When the apps calls eglOpenDisplay() a device driver is selected and loaded
(look for dlsym() or LoadLibrary() in egldriver.c).

The driver's _eglMain() function is then called.  This driver function
allocates, initializes and returns a new _EGLDriver object (usually a
subclass of that type).

As part of initialization, the dispatch table in _EGLDriver->API must be
populated with all the EGL entrypoints.  Typically, _eglInitDriverFallbacks()
can be used to plug in default/fallback functions.  Some functions like
driver->API.Initialize and driver->API.Terminate _must_ be implemented
with driver-specific code (no default/fallback function is possible).


A bit later, the app will call eglInitialize().  This will get routed
to the driver->API.Initialize() function.  Any additional driver
initialization that wasn't done in _eglMain() should be done at this
point.  Typically, this will involve setting up visual configs, etc.



Special Functions:

Certain EGL functions _must_ be implemented by the driver.  This includes:

eglCreateContext
eglCreateWindowSurface
eglCreatePixmapSurface
eglCreatePBufferSurface
eglMakeCurrent
eglSwapBuffers

Most of the EGLConfig-related functions can be implemented with the
defaults/fallbacks.  Same thing for the eglGet/Query functions.




Teardown:

When eglTerminate() is called, the driver->API.Terminate() function is
called.  The driver should clean up after itself.  eglTerminate() will
then close/unload the driver (shared library).




Subclassing:

The internal libEGL data structures such as _EGLDisplay, _EGLContext,
_EGLSurface, etc should be considered base classes from which drivers
will derive subclasses.