Fix layer transform matrix for TextureView
Fix order of matrix multipication and use drawImage instead of
shader.
Test: Ran camera app, message app and smart face lock app.
Bug: 67405584
Change-Id: I3df161d58218e1b1845f1c1ca2db2b12c51b3532
diff --git a/libs/hwui/pipeline/skia/LayerDrawable.cpp b/libs/hwui/pipeline/skia/LayerDrawable.cpp
index 5c6078d..3b72a8b 100644
--- a/libs/hwui/pipeline/skia/LayerDrawable.cpp
+++ b/libs/hwui/pipeline/skia/LayerDrawable.cpp
@@ -72,15 +72,23 @@
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;