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:
parent
c2d9862c85
commit
9f24fd020e
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue