diff options
author | Stan Iliev <stani@google.com> | 2018-05-23 18:36:42 -0700 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2018-05-23 18:36:42 -0700 |
commit | 8deb6ac7cd81db578b0bff0fc948030cf9041aa1 (patch) | |
tree | cb0825e7208abdb91630864a3b4af6f2ec7f7401 /libs/hwui/pipeline/skia/GLFunctorDrawable.cpp | |
parent | 801f05120f73502d0970d9399468586dccbe7a93 (diff) | |
parent | a2cc38e7fb6350ee772f36891f910b085a9ccd3e (diff) |
Merge "Make sure frame buffer 0 is bound before calling GL functor" into pi-dev
am: a2cc38e7fb
Change-Id: Iedbd9549e754bb2884f447e3d964b9601e9161e5
Diffstat (limited to 'libs/hwui/pipeline/skia/GLFunctorDrawable.cpp')
-rw-r--r-- | libs/hwui/pipeline/skia/GLFunctorDrawable.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/libs/hwui/pipeline/skia/GLFunctorDrawable.cpp b/libs/hwui/pipeline/skia/GLFunctorDrawable.cpp index 145e3c485cbc..9c80ff86df53 100644 --- a/libs/hwui/pipeline/skia/GLFunctorDrawable.cpp +++ b/libs/hwui/pipeline/skia/GLFunctorDrawable.cpp @@ -76,13 +76,20 @@ void GLFunctorDrawable::onDraw(SkCanvas* canvas) { // apply a simple clip with a scissor or a complex clip with a stencil SkRegion clipRegion; canvas->temporary_internal_getRgnClip(&clipRegion); + canvas->flush(); + glBindFramebuffer(GL_FRAMEBUFFER, 0); + glViewport(0, 0, info.width, info.height); if (CC_UNLIKELY(clipRegion.isComplex())) { + //TODO: move stencil clear and canvas flush to SkAndroidFrameworkUtils::clipWithStencil glDisable(GL_SCISSOR_TEST); glStencilMask(0x1); glClearStencil(0); glClear(GL_STENCIL_BUFFER_BIT); + // GL ops get inserted here if previous flush is missing, which could dirty the stencil bool stencilWritten = SkAndroidFrameworkUtils::clipWithStencil(canvas); - canvas->flush(); + canvas->flush(); //need this flush for the single op that draws into the stencil + glBindFramebuffer(GL_FRAMEBUFFER, 0); + glViewport(0, 0, info.width, info.height); if (stencilWritten) { glStencilMask(0x1); glStencilFunc(GL_EQUAL, 0x1, 0x1); @@ -93,11 +100,9 @@ void GLFunctorDrawable::onDraw(SkCanvas* canvas) { glDisable(GL_STENCIL_TEST); } } else if (clipRegion.isEmpty()) { - canvas->flush(); glDisable(GL_STENCIL_TEST); glDisable(GL_SCISSOR_TEST); } else { - canvas->flush(); glDisable(GL_STENCIL_TEST); glEnable(GL_SCISSOR_TEST); setScissor(info.height, clipRegion.getBounds()); |