summaryrefslogtreecommitdiffstats
path: root/src/egl/main/eglarray.c
diff options
context:
space:
mode:
authorChia-I Wu <olv@lunarg.com>2010-07-04 15:55:12 +0800
committerChia-I Wu <olv@lunarg.com>2010-07-06 16:16:39 +0800
commitf2aa361f3b58a91780c9358b3f8716f6434074c7 (patch)
treea7999f2c026175ef609853b405cadac75e3fef84 /src/egl/main/eglarray.c
parentcf588ab3f1edb89be4cd57045a3888ff482fa817 (diff)
downloadexternal_mesa3d-f2aa361f3b58a91780c9358b3f8716f6434074c7.zip
external_mesa3d-f2aa361f3b58a91780c9358b3f8716f6434074c7.tar.gz
external_mesa3d-f2aa361f3b58a91780c9358b3f8716f6434074c7.tar.bz2
egl: Rework driver loading.
Driver loading is now splitted into two stages. In the first stage, an _EGLModule is created for each driver: user driver, default drivers, and all files in the search directories that start with "egl_". Modules are not loaded at this stage. In the second stage, each module is loaded to initialize a display. The process stops at the first module that can initialize the display. If eglGetProcAddress is called before eglInitialize, the same code path will be taken to find the first module that supports EGL_DEFAULT_DISPLAY. Because we do not want to initialize the display, drv->Probe is used instead in this case.
Diffstat (limited to 'src/egl/main/eglarray.c')
-rw-r--r--src/egl/main/eglarray.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/egl/main/eglarray.c b/src/egl/main/eglarray.c
index 41550bb..781d07f 100644
--- a/src/egl/main/eglarray.c
+++ b/src/egl/main/eglarray.c
@@ -84,6 +84,22 @@ _eglAppendArray(_EGLArray *array, void *elem)
/**
+ * Erase an element from an array.
+ */
+void
+_eglEraseArray(_EGLArray *array, EGLint i, void (*free_cb)(void *))
+{
+ if (free_cb)
+ free_cb(array->Elements[i]);
+ if (i < array->Size - 1) {
+ memmove(&array->Elements[i], &array->Elements[i + 1],
+ (array->Size - i - 1) * sizeof(array->Elements[0]));
+ }
+ array->Size--;
+}
+
+
+/**
* Find in an array for the given element.
*/
void *