summaryrefslogtreecommitdiff
path: root/libs/hwui/OpenGLRenderer.cpp
diff options
context:
space:
mode:
author Chris Craik <ccraik@google.com> 2015-05-26 14:25:02 -0700
committer Chris Craik <ccraik@google.com> 2015-05-26 15:04:27 -0700
commit1e4c8074fa9d1ab867d287b7788e5b83db295a5c (patch)
tree98be9dbfb39c29940e6f55626ae5f8b3c9e098bb /libs/hwui/OpenGLRenderer.cpp
parentaa1cd25db72297f13539928e8aa45ba992f2f230 (diff)
Fix position snapping for drawBitmap(rect, rect)
bug:20669049 Change-Id: Ied5f1d7e681409b6b7f6f582ed344b479df4c6d7
Diffstat (limited to 'libs/hwui/OpenGLRenderer.cpp')
-rw-r--r--libs/hwui/OpenGLRenderer.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 54bcd7e43d1d..b3fb7ef3f5a3 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -841,7 +841,7 @@ void OpenGLRenderer::composeLayer(const Snapshot& removed, const Snapshot& resto
}
void OpenGLRenderer::drawTextureLayer(Layer* layer, const Rect& rect) {
- bool snap = !layer->getForceFilter()
+ const bool tryToSnap = !layer->getForceFilter()
&& layer->getWidth() == (uint32_t) rect.getWidth()
&& layer->getHeight() == (uint32_t) rect.getHeight();
Glop glop;
@@ -849,7 +849,7 @@ void OpenGLRenderer::drawTextureLayer(Layer* layer, const Rect& rect) {
.setMeshTexturedUvQuad(nullptr, Rect(0, 1, 1, 0)) // TODO: simplify with VBO
.setFillTextureLayer(*layer, getLayerAlpha(layer))
.setTransform(currentSnapshot()->getOrthoMatrix(), *currentTransform(), false)
- .setModelViewMapUnitToRectOptionalSnap(snap, rect)
+ .setModelViewMapUnitToRectOptionalSnap(tryToSnap, rect)
.setRoundRectClipState(currentSnapshot()->roundRectClipState)
.build();
renderGlop(glop);
@@ -865,7 +865,7 @@ void OpenGLRenderer::composeLayerRect(Layer* layer, const Rect& rect, bool swap)
Blend::ModeOrderSwap modeUsage = swap ?
Blend::ModeOrderSwap::Swap : Blend::ModeOrderSwap::NoSwap;
const Matrix4& transform = swap ? Matrix4::identity() : *currentTransform();
- bool snap = !swap
+ const bool tryToSnap = !swap
&& layer->getWidth() == static_cast<uint32_t>(rect.getWidth())
&& layer->getHeight() == static_cast<uint32_t>(rect.getHeight());
Glop glop;
@@ -873,7 +873,7 @@ void OpenGLRenderer::composeLayerRect(Layer* layer, const Rect& rect, bool swap)
.setMeshTexturedUvQuad(nullptr, layer->texCoords)
.setFillLayer(layer->getTexture(), layer->getColorFilter(), getLayerAlpha(layer), layer->getMode(), modeUsage)
.setTransform(currentSnapshot()->getOrthoMatrix(), transform, false)
- .setModelViewMapUnitToRectOptionalSnap(snap, rect)
+ .setModelViewMapUnitToRectOptionalSnap(tryToSnap, rect)
.setRoundRectClipState(currentSnapshot()->roundRectClipState)
.build();
renderGlop(glop);
@@ -1654,14 +1654,17 @@ void OpenGLRenderer::drawBitmap(const SkBitmap* bitmap, Rect src, Rect dst, cons
fmin(1.0f, src.right / texture->width),
fmin(1.0f, src.bottom / texture->height));
- int textureFillFlags = static_cast<int>((bitmap->colorType() == kAlpha_8_SkColorType)
+ const int textureFillFlags = static_cast<int>((bitmap->colorType() == kAlpha_8_SkColorType)
? TextureFillFlags::kIsAlphaMaskTexture : TextureFillFlags::kNone);
+ const bool tryToSnap = MathUtils::areEqual(src.getWidth(), dst.getWidth())
+ && MathUtils::areEqual(src.getHeight(), dst.getHeight());
+
Glop glop;
GlopBuilder(mRenderState, mCaches, &glop)
.setMeshTexturedUvQuad(texture->uvMapper, uv)
.setFillTexturePaint(*texture, textureFillFlags, paint, currentSnapshot()->alpha)
.setTransform(currentSnapshot()->getOrthoMatrix(), *currentTransform(), false)
- .setModelViewMapUnitToRectSnap(dst)
+ .setModelViewMapUnitToRectOptionalSnap(tryToSnap, dst)
.setRoundRectClipState(currentSnapshot()->roundRectClipState)
.build();
renderGlop(glop);