summaryrefslogtreecommitdiff
path: root/libs/hwui/BakedOpRenderer.cpp
diff options
context:
space:
mode:
author Chris Craik <ccraik@google.com> 2017-08-21 20:02:21 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2017-08-21 20:02:21 +0000
commitcf1b82c3764344ff6d3b02f20d8039e40d8f6b3c (patch)
treeeaf0fe96acffc178e879ff33a6a460156b9f6f74 /libs/hwui/BakedOpRenderer.cpp
parentdb9ae4217def4f06b552e61b09c153976862658a (diff)
parent530a2b44d9a4b40d028c912ade858da73081ed85 (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.cpp14
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;
}