egl: Destroy display's resources upon termination.

eglTerminate should destroy the contexts and surfaces of the display.

Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
This commit is contained in:
Chia-I Wu 2009-07-16 21:21:57 -07:00 committed by Brian Paul
parent be9d1ab171
commit 3f7e0d5302
3 changed files with 37 additions and 3 deletions

View File

@ -120,6 +120,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.

View File

@ -56,6 +56,10 @@ extern _EGLDisplay *
_eglFindDisplay(NativeDisplayType nativeDisplay);
extern void
_eglReleaseDisplayResources(_EGLDriver *drv, EGLDisplay dpy);
extern void
_eglCleanupDisplay(_EGLDisplay *disp);

View File

@ -284,9 +284,7 @@ _eglCloseDriver(_EGLDriver *drv, EGLDisplay dpy)
_eglLog(_EGL_DEBUG, "Closing %s", drv->Name);
/*
* XXX check for currently bound context/surfaces and delete them?
*/
_eglReleaseDisplayResources(drv, dpy);
b = drv->API.Terminate(drv, dpy);