Bunch of fixes.

Fixes memory leak, fixes multiple context support, fix 3d transforms.

Change-Id: I7462cfbc57857dbd4de4e76b9d4cba58a1bce77b
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index aaf7564..3c1fe2a 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -160,7 +160,9 @@
     mTextureCache.clear();
     mLayerCache.clear();
     mGradientCache.clear();
+    mPathCache.clear();
     mPatchCache.clear();
+    mProgramCache.clear();
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -410,8 +412,14 @@
 }
 
 bool OpenGLRenderer::quickReject(float left, float top, float right, float bottom) {
-    Rect r(left, top, right, bottom);
-    mSnapshot->transform.mapRect(r);
+    SkRect sr;
+    sr.set(left, top, right, bottom);
+
+    SkMatrix m;
+    mSnapshot->transform.copyTo(m);
+    m.mapRect(&sr);
+
+    Rect r(sr.fLeft, sr.fTop, sr.fRight, sr.fBottom);
     return !mSnapshot->clipRect.intersects(r);
 }