diff options
| author | 2017-08-21 20:02:21 +0000 | |
|---|---|---|
| committer | 2017-08-21 20:02:21 +0000 | |
| commit | cf1b82c3764344ff6d3b02f20d8039e40d8f6b3c (patch) | |
| tree | eaf0fe96acffc178e879ff33a6a460156b9f6f74 /libs/hwui/BakedOpRenderer.cpp | |
| parent | db9ae4217def4f06b552e61b09c153976862658a (diff) | |
| parent | 530a2b44d9a4b40d028c912ade858da73081ed85 (diff) | |
Merge "Disable hwui blending for first draw to main FBO" into oc-mr1-dev
Diffstat (limited to 'libs/hwui/BakedOpRenderer.cpp')
| -rw-r--r-- | libs/hwui/BakedOpRenderer.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/libs/hwui/BakedOpRenderer.cpp b/libs/hwui/BakedOpRenderer.cpp index df2b35b39aa8..4e59baa48983 100644 --- a/libs/hwui/BakedOpRenderer.cpp +++ b/libs/hwui/BakedOpRenderer.cpp @@ -208,7 +208,6 @@ void BakedOpRenderer::drawRects(const float* rects, int count, const SkPaint* pa // TODO: Currently assume full FBO damage, due to FrameInfoVisualizer::unionDirty. // Should should scissor/set mHasDrawn safely. mRenderState.scissor().setEnabled(false); - mHasDrawn = true; Glop glop; GlopBuilder(mRenderState, mCaches, &glop) .setRoundRectClipState(nullptr) @@ -217,7 +216,11 @@ void BakedOpRenderer::drawRects(const float* rects, int count, const SkPaint* pa .setTransform(Matrix4::identity(), TransformFlags::None) .setModelViewIdentityEmptyBounds() .build(); - mRenderState.render(glop, mRenderTarget.orthoMatrix); + // 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); + mHasDrawn = true; } // clears and re-fills stencil with provided rendertarget space quads, @@ -234,7 +237,7 @@ void BakedOpRenderer::setupStencilQuads(std::vector<Vertex>& quadVertices, .setTransform(Matrix4::identity(), TransformFlags::None) .setModelViewIdentityEmptyBounds() .build(); - mRenderState.render(glop, mRenderTarget.orthoMatrix); + mRenderState.render(glop, mRenderTarget.orthoMatrix, false); mRenderState.stencil().enableTest(incrementThreshold); } @@ -346,7 +349,10 @@ void BakedOpRenderer::prepareRender(const Rect* dirtyBounds, const ClipBase* cli void BakedOpRenderer::renderGlopImpl(const Rect* dirtyBounds, const ClipBase* clip, const Glop& glop) { prepareRender(dirtyBounds, clip); - mRenderState.render(glop, mRenderTarget.orthoMatrix); + // 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); if (!mRenderTarget.frameBufferId) mHasDrawn = true; } |