diff options
author | Romain Guy <romainguy@google.com> | 2010-12-07 20:09:23 -0800 |
---|---|---|
committer | Romain Guy <romainguy@google.com> | 2010-12-07 20:12:50 -0800 |
commit | 67f27952c1bcb2230beef9b5ca0bf42edad436a9 (patch) | |
tree | 9cfec6c807b64d51fba041e2f6dd50c6abe3577e /core | |
parent | dbf78bdb7a9aed3b8393c247128a7e8c760343b5 (diff) | |
download | frameworks_base-67f27952c1bcb2230beef9b5ca0bf42edad436a9.zip frameworks_base-67f27952c1bcb2230beef9b5ca0bf42edad436a9.tar.gz frameworks_base-67f27952c1bcb2230beef9b5ca0bf42edad436a9.tar.bz2 |
Correctly release the OpenGL Canvas on EGL error.
Change-Id: Ib31fd8445f7ce5f7aa7e0205de0e7db80d024fc2
Diffstat (limited to 'core')
-rw-r--r-- | core/java/android/view/HardwareRenderer.java | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java index 24a9f87..0e294f7 100644 --- a/core/java/android/view/HardwareRenderer.java +++ b/core/java/android/view/HardwareRenderer.java @@ -50,7 +50,7 @@ public abstract class HardwareRenderer { private boolean mRequested = true; /** - * Indicates that the current process cannot use hardware rendering. + * Invoke this method to disable hardware rendering in the current process. * * @hide */ @@ -207,7 +207,7 @@ public abstract class HardwareRenderer { EGLSurface mEglSurface; GL mGl; - GLES20Canvas mCanvas; + HardwareCanvas mCanvas; final int mGlVersion; final boolean mTranslucent; @@ -279,12 +279,15 @@ public abstract class HardwareRenderer { if (error != EGL11.EGL_CONTEXT_LOST) { // we'll try again if it was context lost setRequested(false); + } else { + Log.w(LOG_TAG, "Mountain View, we've had a problem here. " + + "Switching back to software rendering."); } Log.w(LOG_TAG, "EGL error: " + getEGLErrorString(error)); } } } - + @Override boolean initialize(SurfaceHolder holder) { if (isRequested() && !isEnabled()) { @@ -654,6 +657,14 @@ public abstract class HardwareRenderer { } @Override + void destroy(boolean full) { + super.destroy(full); + if (full && mGlCanvas != null) { + mGlCanvas = null; + } + } + + @Override DisplayList createDisplayList() { return new GLES20DisplayList(); } |