From 0a41c3c706c7238f8de0382d1bb4f019194e9bc1 Mon Sep 17 00:00:00 2001 From: Jack Palevich Date: Mon, 15 Mar 2010 20:45:21 -0700 Subject: Implement eglInitialize / eglTerminate reference counting Previously we imlpemented the standard semantics for eglInitialize / eglTerminate, which are that eglInitialize may be called any number of times, but the first call to eglTerminate will terminate the display. Now we follow reference-countins semantics, which means that eglTerminate will only terminate the display when the reference count returns to zero. This change allows EGL to be used by multiple independently written modules in the same process. (Otherwise there is no way for the independent modules to coordinate their use of the display.) --- opengl/libs/EGL/egl.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'opengl') diff --git a/opengl/libs/EGL/egl.cpp b/opengl/libs/EGL/egl.cpp index 145e25e..89b3e1f 100644 --- a/opengl/libs/EGL/egl.cpp +++ b/opengl/libs/EGL/egl.cpp @@ -650,6 +650,7 @@ EGLBoolean eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor) if (dp->refs > 0) { if (major != NULL) *major = VERSION_MAJOR; if (minor != NULL) *minor = VERSION_MINOR; + dp->refs++; return EGL_TRUE; } @@ -755,8 +756,10 @@ EGLBoolean eglTerminate(EGLDisplay dpy) } // this is specific to Android, display termination is ref-counted. - if (dp->refs > 1) + if (dp->refs > 1) { + dp->refs--; return EGL_TRUE; + } EGLBoolean res = EGL_FALSE; for (int i=0 ; i