summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorRomain Guy <romainguy@google.com>2010-12-07 20:09:23 -0800
committerRomain Guy <romainguy@google.com>2010-12-07 20:12:50 -0800
commit67f27952c1bcb2230beef9b5ca0bf42edad436a9 (patch)
tree9cfec6c807b64d51fba041e2f6dd50c6abe3577e /core
parentdbf78bdb7a9aed3b8393c247128a7e8c760343b5 (diff)
downloadframeworks_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.java17
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();
}