diff options
author | Jack Palevich <jackpal@google.com> | 2010-04-19 19:06:35 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-04-19 19:06:35 -0700 |
commit | 7305f4166306dac08fc63056f2c85e91015df879 (patch) | |
tree | ef1897151e5be5acbd78c75018c9235a42b6de25 /opengl | |
parent | c86f0779d6aa60d7eb446fb33742dac6bfc3b6b8 (diff) | |
parent | 0e4aa37872810e46775374596e0beb11f7123727 (diff) | |
download | frameworks_base-7305f4166306dac08fc63056f2c85e91015df879.zip frameworks_base-7305f4166306dac08fc63056f2c85e91015df879.tar.gz frameworks_base-7305f4166306dac08fc63056f2c85e91015df879.tar.bz2 |
Merge "Quietly handle EGL_BAD_NATIVE_WINDOW errors" into froyo
Diffstat (limited to 'opengl')
-rw-r--r-- | opengl/java/android/opengl/GLSurfaceView.java | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/opengl/java/android/opengl/GLSurfaceView.java b/opengl/java/android/opengl/GLSurfaceView.java index 5ad0361..f904cdf 100644 --- a/opengl/java/android/opengl/GLSurfaceView.java +++ b/opengl/java/android/opengl/GLSurfaceView.java @@ -973,9 +973,12 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback mEglDisplay, mEglConfig, holder); if (mEglSurface == null || mEglSurface == EGL10.EGL_NO_SURFACE) { - Log.w("EglHelper", "createWindowSurface failed. mEglDisplay: " + mEglDisplay + - " mEglConfig: " + mEglConfig + " holder: " + holder); - throwEglException("createWindowSurface"); + int error = mEgl.eglGetError(); + if (error == EGL10.EGL_BAD_NATIVE_WINDOW) { + Log.e("EglHelper", "createWindowSurface returned EGL_BAD_NATIVE_WINDOW."); + return null; + } + throwEglException("createWindowSurface", error); } /* @@ -1019,9 +1022,16 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback * get a new surface. */ int error = mEgl.eglGetError(); - if (error == EGL11.EGL_CONTEXT_LOST) { + switch(error) { + case EGL11.EGL_CONTEXT_LOST: return false; - } else { + case EGL10.EGL_BAD_NATIVE_WINDOW: + // The native window is bad, probably because the + // window manager has closed it. Ignore this error, + // on the expectation that the application will be closed soon. + Log.e("EglHelper", "eglSwapBuffers returned EGL_BAD_NATIVE_WINDOW. tid=" + Thread.currentThread().getId()); + break; + default: throwEglException("eglSwapBuffers", error); } } @@ -1292,6 +1302,10 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback Log.w("GLThread", "egl createSurface"); } gl = (GL10) mEglHelper.createSurface(getHolder()); + if (gl == null) { + // Couldn't create a surface. Quit quietly. + break; + } sGLThreadManager.checkGLDriver(gl); createEglSurface = false; } |