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) {