aboutsummaryrefslogtreecommitdiffstats
path: root/src/egl/main/egldisplay.c
diff options
context:
space:
mode:
authorChia-I Wu <[email protected]>2009-07-16 21:21:57 -0700
committerBrian Paul <[email protected]>2009-07-17 11:54:06 -0600
commit3f7e0d5302ed0fadd794a41af6e476d2c408adc7 (patch)
tree4359eb96a321daf1df24d614784f6771a880b654 /src/egl/main/egldisplay.c
parentbe9d1ab171b1b29108c781af84dd500707a12925 (diff)
egl: Destroy display's resources upon termination.
eglTerminate should destroy the contexts and surfaces of the display. Signed-off-by: Chia-I Wu <[email protected]>
Diffstat (limited to 'src/egl/main/egldisplay.c')
-rw-r--r--src/egl/main/egldisplay.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/egl/main/egldisplay.c b/src/egl/main/egldisplay.c
index 1f1f41ea71f..89de609d0b4 100644
--- a/src/egl/main/egldisplay.c
+++ b/src/egl/main/egldisplay.c
@@ -121,6 +121,38 @@ _eglFindDisplay(NativeDisplayType nativeDisplay)
/**
+ * Destroy the contexts and surfaces that are linked to the display.
+ */
+void
+_eglReleaseDisplayResources(_EGLDriver *drv, EGLDisplay dpy)
+{
+ _EGLDisplay *display;
+ _EGLContext *contexts;
+ _EGLSurface *surfaces;
+
+ display = _eglLookupDisplay(dpy);
+ if (!display)
+ return;
+ contexts = display->ContextList;
+ surfaces = display->SurfaceList;
+
+ while (contexts) {
+ EGLContext handle = _eglGetContextHandle(contexts);
+ contexts = contexts->Next;
+ drv->API.DestroyContext(drv, dpy, handle);
+ }
+ assert(!display->ContextList);
+
+ while (surfaces) {
+ EGLSurface handle = _eglGetSurfaceHandle(surfaces);
+ surfaces = surfaces->Next;
+ drv->API.DestroySurface(drv, dpy, handle);
+ }
+ assert(!display->SurfaceList);
+}
+
+
+/**
* Free all the data hanging of an _EGLDisplay object, but not
* the object itself.
*/