summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorRomain Guy <romainguy@google.com>2010-12-07 20:15:29 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-12-07 20:15:29 -0800
commitdde4c353851fd107ebe122a4ad9328e007c169b9 (patch)
tree8efded1af7e86586a27044ada93baf29047845b5 /core
parentd00e116293589fb258f8d153d65ffdea38e0b5ec (diff)
parent67f27952c1bcb2230beef9b5ca0bf42edad436a9 (diff)
downloadframeworks_base-dde4c353851fd107ebe122a4ad9328e007c169b9.zip
frameworks_base-dde4c353851fd107ebe122a4ad9328e007c169b9.tar.gz
frameworks_base-dde4c353851fd107ebe122a4ad9328e007c169b9.tar.bz2
Merge "Correctly release the OpenGL Canvas on EGL error."
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();
}