diff options
| author | 2017-09-01 04:24:06 +0000 | |
|---|---|---|
| committer | 2017-09-01 04:24:06 +0000 | |
| commit | 9a43f654d7a72fb41e34c261cdaabe0491d8e5ae (patch) | |
| tree | 3743ba7107ed867f155ef6ae54cff6a402c4b962 | |
| parent | 9d3b6540f188da2bbde6da54152e2b6bfaeeab40 (diff) | |
| parent | 02f3efdeff31d99aa168a0798571414ade3fb844 (diff) | |
Merge "Fix blending behavior with first draw op" into oc-mr1-dev am: da910e805b
am: 02f3efdeff
Change-Id: Ib0f28495a0f5028657cbb4f4cab58642779d8227
| -rw-r--r-- | libs/hwui/BakedOpRenderer.cpp | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/libs/hwui/BakedOpRenderer.cpp b/libs/hwui/BakedOpRenderer.cpp index 4e59baa48983..3c3b3177159b 100644 --- a/libs/hwui/BakedOpRenderer.cpp +++ b/libs/hwui/BakedOpRenderer.cpp @@ -216,10 +216,7 @@ void BakedOpRenderer::drawRects(const float* rects, int count, const SkPaint* pa .setTransform(Matrix4::identity(), TransformFlags::None) .setModelViewIdentityEmptyBounds() .build(); - // Disable blending if this is the first draw to the main framebuffer, in case app has defined - // transparency where it doesn't make sense - as first draw in opaque window. - bool overrideDisableBlending = !mHasDrawn && mOpaque && !mRenderTarget.frameBufferId; - mRenderState.render(glop, mRenderTarget.orthoMatrix, overrideDisableBlending); + mRenderState.render(glop, mRenderTarget.orthoMatrix, false); mHasDrawn = true; } @@ -350,8 +347,14 @@ void BakedOpRenderer::renderGlopImpl(const Rect* dirtyBounds, const ClipBase* cl const Glop& glop) { prepareRender(dirtyBounds, clip); // Disable blending if this is the first draw to the main framebuffer, in case app has defined - // transparency where it doesn't make sense - as first draw in opaque window. - bool overrideDisableBlending = !mHasDrawn && mOpaque && !mRenderTarget.frameBufferId; + // transparency where it doesn't make sense - as first draw in opaque window. Note that we only + // apply this improvement when the blend mode is SRC_OVER - other modes (e.g. CLEAR) can be + // valid draws that affect other content (e.g. draw CLEAR, then draw DST_OVER) + bool overrideDisableBlending = !mHasDrawn + && mOpaque + && !mRenderTarget.frameBufferId + && glop.blend.src == GL_ONE + && glop.blend.dst == GL_ONE_MINUS_SRC_ALPHA; mRenderState.render(glop, mRenderTarget.orthoMatrix, overrideDisableBlending); if (!mRenderTarget.frameBufferId) mHasDrawn = true; } |