From 1e4c8074fa9d1ab867d287b7788e5b83db295a5c Mon Sep 17 00:00:00 2001 From: Chris Craik Date: Tue, 26 May 2015 14:25:02 -0700 Subject: Fix position snapping for drawBitmap(rect, rect) bug:20669049 Change-Id: Ied5f1d7e681409b6b7f6f582ed344b479df4c6d7 --- libs/hwui/OpenGLRenderer.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'libs/hwui/OpenGLRenderer.cpp') 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(rect.getWidth()) && layer->getHeight() == static_cast(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((bitmap->colorType() == kAlpha_8_SkColorType) + const int textureFillFlags = static_cast((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); -- cgit v1.2.3-59-g8ed1b