diff options
| -rw-r--r-- | libs/hwui/pipeline/skia/LayerDrawable.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/libs/hwui/pipeline/skia/LayerDrawable.cpp b/libs/hwui/pipeline/skia/LayerDrawable.cpp index 5c6078d566b4..3b72a8b3f7fc 100644 --- a/libs/hwui/pipeline/skia/LayerDrawable.cpp +++ b/libs/hwui/pipeline/skia/LayerDrawable.cpp @@ -72,15 +72,23 @@ bool LayerDrawable::DrawLayer(GrContext* context, SkCanvas* canvas, Layer* layer textureMatrixInv = textureMatrix; } - SkMatrix matrix = SkMatrix::Concat(textureMatrixInv, layerTransform); + SkMatrix matrix = SkMatrix::Concat(layerTransform, textureMatrixInv); SkPaint paint; paint.setAlpha(layer->getAlpha()); paint.setBlendMode(layer->getMode()); paint.setColorFilter(sk_ref_sp(layer->getColorFilter())); - // draw image with a shader to avoid save/restore of the matrix - paint.setShader(layerImage->makeShader(&matrix)); - canvas->drawRect(SkRect::MakeWH(layerWidth, layerHeight), paint); + + const bool nonIdentityMatrix = !matrix.isIdentity(); + if (nonIdentityMatrix) { + canvas->save(); + canvas->concat(matrix); + } + canvas->drawImage(layerImage.get(), 0, 0, &paint); + // restore the original matrix + if (nonIdentityMatrix) { + canvas->restore(); + } } return layerImage; |