mesa/src/egl/main
Chia-I Wu 18457cb263 egl: Add funtions to link contexts and surfaces to displays.
EGL contexts and surfaces are resources of displays.  They should be
managed by displays.  This commit adds a bunch of functions to
egldisplay.c to help establish the links between contexts/surfaces and
displays.  How links are established is considered opaque outside
display.  Functions like _eglGetSurfaceHandle or _eglLookupSurface are
therefore moved to egldisplay.c, with some small modifications.

The idea is also extended to display.  That is, displays need to link to
themselves to be looked up.

This commit only adds the functions.  A commit to use them should
follow.

Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
2009-07-17 11:48:27 -06:00
..
Makefile egl: Support per-thread info. 2009-07-17 11:41:02 -06:00
README.txt egl: some basic docs for libEGL 2008-06-11 19:35:52 -06:00
eglapi.c egl: Add funtions to link contexts and surfaces to displays. 2009-07-17 11:48:27 -06:00
eglapi.h egl: new eglGetProcAddress() code 2008-05-30 14:50:33 -06:00
eglcompiler.h egl: Add eglcompiler.h for compiler features. 2009-07-17 11:36:45 -06:00
eglconfig.c egl: if a surface type isn't defined let's default to EGL_WINDOW_BIT 2009-02-19 13:09:02 +00: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: don't use __FUNCTION__ in error messages 2009-03-25 08:18:28 -06:00
eglconfigutil.h egl: don't include stdint.h on Windows 2008-08-05 08:13:50 -06:00
eglcontext.c egl: Add funtions to link contexts and surfaces to displays. 2009-07-17 11:48:27 -06:00
eglcontext.h egl: Add funtions to link contexts and surfaces to displays. 2009-07-17 11:48:27 -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: Add funtions to link contexts and surfaces to displays. 2009-07-17 11:48:27 -06:00
egldisplay.h egl: Add funtions to link contexts and surfaces to displays. 2009-07-17 11:48:27 -06:00
egldriver.c egl: fixes for Windows 2008-08-06 16:37:49 -06:00
egldriver.h egl: implment EGL_LARGEST_PBUFFER query 2008-06-20 10:20:25 -06:00
eglglobals.c egl: Support per-thread info. 2009-07-17 11:41:02 -06:00
eglglobals.h egl: Support per-thread info. 2009-07-17 11:41:02 -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
eglscreen.c
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: Add funtions to link contexts and surfaces to displays. 2009-07-17 11:48:27 -06:00
eglsurface.h egl: Add funtions to link contexts and surfaces to displays. 2009-07-17 11:48:27 -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.