diff options
author | Jack Palevich <jackpal@google.com> | 2010-03-15 20:45:21 -0700 |
---|---|---|
committer | Jack Palevich <jackpal@google.com> | 2010-03-15 21:21:51 -0700 |
commit | 81cd08448586d73e1ea602f4c83a2203483ae735 (patch) | |
tree | f368e2498ff3729844cb38ba151c093398c69b78 /opengl | |
parent | 11ebca5b4f890de197a5a5180460c7bd9aa26b54 (diff) | |
download | frameworks_native-81cd08448586d73e1ea602f4c83a2203483ae735.zip frameworks_native-81cd08448586d73e1ea602f4c83a2203483ae735.tar.gz frameworks_native-81cd08448586d73e1ea602f4c83a2203483ae735.tar.bz2 |
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.)
Diffstat (limited to 'opengl')
-rw-r--r-- | opengl/libs/EGL/egl.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
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<IMPL_NUM_IMPLEMENTATIONS ; i++) { |