EGL: move disconnect to surface dtor

This change moves the call to native_window_api_disconnect from
eglDestroySurface to the egl_surface_t destructor.  The egl_surface_t
can outlive the external EGLSurface if eglDestroySurface is called while
the surface is made current on a thread.

Change-Id: I0df6117a5633c2a19935fe356579abdd76fc471f
This commit is contained in:
Jamie Gennis 2011-08-24 14:54:56 -07:00
parent c2d9862c85
commit 9f24fd020e
2 changed files with 9 additions and 9 deletions

View File

@ -454,13 +454,6 @@ EGLBoolean eglDestroySurface(EGLDisplay dpy, EGLSurface surface)
EGLBoolean result = s->cnx->egl.eglDestroySurface(
dp->disp[s->impl].dpy, s->surface);
if (result == EGL_TRUE) {
ANativeWindow* const window = s->win.get();
if (window != NULL) {
native_window_set_buffers_format(window, 0);
if (native_window_api_disconnect(window, NATIVE_WINDOW_API_EGL)) {
LOGE("EGLNativeWindowType %p disconnected failed", window);
}
}
_s.terminate();
}
return result;

View File

@ -125,7 +125,15 @@ void egl_object_t::LocalRef<N,T>::terminate() {
class egl_surface_t: public egl_object_t {
protected:
~egl_surface_t() {}
~egl_surface_t() {
ANativeWindow* const window = win.get();
if (window != NULL) {
native_window_set_buffers_format(window, 0);
if (native_window_api_disconnect(window, NATIVE_WINDOW_API_EGL)) {
LOGE("EGLNativeWindowType %p disconnected failed", window);
}
}
}
public:
typedef egl_object_t::LocalRef<egl_surface_t, EGLSurface> Ref;
@ -232,4 +240,3 @@ egl_sync_t* get_sync(EGLSyncKHR sync) {
// ----------------------------------------------------------------------------
#endif // ANDROID_EGL_OBJECT_H