void VIVANTE_DestroyWindow(_THIS, SDL_Window * window) { SDL_VideoData *videodata = (SDL_VideoData *)_this->driverdata; SDL_WindowData *data; data = window->driverdata; if (data) { #if SDL_VIDEO_OPENGL_EGL if (data->egl_surface != EGL_NO_SURFACE) { SDL_EGL_DestroySurface(_this, data->egl_surface); } #endif if (data->native_window) { #if SDL_VIDEO_DRIVER_VIVANTE_VDK vdkDestroyWindow(data->native_window); #else videodata->fbDestroyWindow(data->native_window); #endif } SDL_free(data); } window->driverdata = NULL; }
/* vdkFinishEGL EGL wrapper to release all resouces hold by the VDK and EGL. PARAMETERS: vdkEGL * Egl Pointer to a vdkEGL structure filled in by vdkSetupEGL. RETURNS: Nothing. */ VDKAPI void VDKLANG vdkFinishEGL( vdkEGL * Egl ) { /* Only process a valid EGL pointer. */ if (Egl != NULL) { /* Only process a valid EGLDisplay pointer. */ if (Egl->eglDisplay != EGL_NO_DISPLAY) { /* Unbind everything from the EGL context. */ Egl->eglMakeCurrent(Egl->eglDisplay, NULL, NULL, NULL); if (Egl->eglContext != EGL_NO_CONTEXT) { /* Destroy the EGL context. */ Egl->eglDestroyContext(Egl->eglDisplay, Egl->eglContext); Egl->eglContext = EGL_NO_CONTEXT; } if (Egl->eglSurface != EGL_NO_SURFACE) { /* Destroy the EGL surface. */ Egl->eglDestroySurface(Egl->eglDisplay, Egl->eglSurface); Egl->eglSurface = EGL_NO_SURFACE; } /* Terminate the EGL display. */ Egl->eglTerminate(Egl->eglDisplay); Egl->eglDisplay = EGL_NO_DISPLAY; /* Release thread data. */ Egl->eglReleaseThread(); } if (Egl->window != 0) { /* Hide the window. */ vdkHideWindow( Egl->window ); /* Destroy the window. */ vdkDestroyWindow( Egl->window ); Egl->window = 0; } if (Egl->display != NULL) { /* Destroy the display. */ vdkDestroyDisplay(Egl->display); Egl->display = NULL; } if (Egl->vdk != NULL) { /* Destroy the VDK. */ vdkExit(Egl->vdk); Egl->vdk = NULL; } } }