egl: some basic docs for libEGL
authorBrian Paul <brian.paul@tungstengraphics.com>
Thu, 12 Jun 2008 01:35:52 +0000 (19:35 -0600)
committerBrian Paul <brian.paul@tungstengraphics.com>
Thu, 12 Jun 2008 01:35:52 +0000 (19:35 -0600)
src/egl/main/README.txt [new file with mode: 0644]

diff --git a/src/egl/main/README.txt b/src/egl/main/README.txt
new file mode 100644 (file)
index 0000000..b3d253d
--- /dev/null
@@ -0,0 +1,71 @@
+
+
+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.
+