Move functor GL setup to just before functor

bug:10399469

Because the stencil setup can issue draws, it *must* come before the
GL state setup.

Change-Id: I52a36213549fc60b091a90cbb923a1f0d35f9a65
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index f2352bb..238d9a4 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -449,14 +449,8 @@
 status_t OpenGLRenderer::callDrawGLFunction(Functor* functor, Rect& dirty) {
     if (mSnapshot->isIgnored()) return DrawGlInfo::kStatusDone;
 
-    interrupt();
     detachFunctor(functor);
 
-    mCaches.enableScissor();
-    if (mDirtyClip) {
-        setScissorFromClip();
-        setStencilFromClip();
-    }
 
     Rect clip(*mSnapshot->clipRect);
     clip.snapToPixelBoundaries();
@@ -477,6 +471,15 @@
     info.height = getSnapshot()->height;
     getSnapshot()->transform->copyTo(&info.transform[0]);
 
+    // setup GL state for functor
+    if (mDirtyClip) {
+        setScissorFromClip();
+        setStencilFromClip(); // can issue draws, so must precede enableScissor()/interrupt()
+    }
+    mCaches.enableScissor();
+    interrupt();
+
+    // call functor immediately after GL state setup
     status_t result = (*functor)(DrawGlInfo::kModeDraw, &info);
 
     if (result != DrawGlInfo::kStatusDone) {