Fix OpenGL errors in various places.

Change-Id: I3a4e115d8fb13b6c443e65460d92987b16f2524c
diff --git a/core/java/android/view/ViewRoot.java b/core/java/android/view/ViewRoot.java
index e71b5b6..0321be0 100644
--- a/core/java/android/view/ViewRoot.java
+++ b/core/java/android/view/ViewRoot.java
@@ -1584,11 +1584,7 @@
         mAttachInfo.mRootView = null;
         mAttachInfo.mSurface = null;
 
-        if (mHwRenderer != null) {
-            mHwRenderer.destroy(true);
-            mHwRenderer = null;
-            mAttachInfo.mHardwareAccelerated = false;
-        }
+        destroyHardwareRenderer();
 
         mSurface.release();
 
@@ -2542,6 +2538,8 @@
         if (LOCAL_LOGV) Log.v(TAG, "DIE in " + this + " of " + mSurface);
         synchronized (this) {
             if (mAdded && !mFirst) {
+                destroyHardwareRenderer();
+
                 int viewVisibility = mView.getVisibility();
                 boolean viewVisibilityChanged = mViewVisibility != viewVisibility;
                 if (mWindowAttributesChanged || viewVisibilityChanged) {
@@ -2566,6 +2564,14 @@
         }
     }
 
+    private void destroyHardwareRenderer() {
+        if (mHwRenderer != null) {
+            mHwRenderer.destroy(true);
+            mHwRenderer = null;
+            mAttachInfo.mHardwareAccelerated = false;
+        }
+    }
+
     public void dispatchFinishedEvent(int seq, boolean handled) {
         Message msg = obtainMessage(FINISHED_EVENT);
         msg.arg1 = seq;