diff options
author | 2015-05-26 14:25:02 -0700 | |
---|---|---|
committer | 2015-05-26 15:04:27 -0700 | |
commit | 1e4c8074fa9d1ab867d287b7788e5b83db295a5c (patch) | |
tree | 98be9dbfb39c29940e6f55626ae5f8b3c9e098bb /libs/hwui/OpenGLRenderer.cpp | |
parent | aa1cd25db72297f13539928e8aa45ba992f2f230 (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.cpp | 15 |
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); |