summaryrefslogtreecommitdiffstats
path: root/core/jni
diff options
context:
space:
mode:
authorChris Craik <ccraik@google.com>2014-08-06 13:42:24 -0700
committerChris Craik <ccraik@google.com>2014-08-06 21:11:31 +0000
commit796475006f5d670e8383a2050f11719522437a43 (patch)
treeb7c017f959a270bf1e106b9e65f1b037fa54f584 /core/jni
parentd1a7fca1451bf4ab7f9b704c0bace180095c2237 (diff)
downloadframeworks_base-796475006f5d670e8383a2050f11719522437a43.zip
frameworks_base-796475006f5d670e8383a2050f11719522437a43.tar.gz
frameworks_base-796475006f5d670e8383a2050f11719522437a43.tar.bz2
Move bitmap transforms out of bitmap ops
bug:11359533 This allows us to deduplicate a lot between the two ops, and fixes the shader coordinate space for the left,top argument drawBitmap to match software. Change-Id: I53da05af9ee74c74e9e70b4ab8053190ca220b16
Diffstat (limited to 'core/jni')
-rw-r--r--core/jni/android_view_GLES20Canvas.cpp21
1 files changed, 18 insertions, 3 deletions
diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp
index ce76b26..afcfaf6 100644
--- a/core/jni/android_view_GLES20Canvas.cpp
+++ b/core/jni/android_view_GLES20Canvas.cpp
@@ -348,7 +348,12 @@ static void android_view_GLES20Canvas_drawBitmap(JNIEnv* env, jobject clazz,
DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererPtr);
Paint* paint = reinterpret_cast<Paint*>(paintPtr);
- renderer->drawBitmap(bitmap, left, top, paint);
+
+ // apply transform directly to canvas, so it affects shaders correctly
+ renderer->save(SkCanvas::kMatrix_SaveFlag);
+ renderer->translate(left, top);
+ renderer->drawBitmap(bitmap, paint);
+ renderer->restore();
}
static void android_view_GLES20Canvas_drawBitmapRect(JNIEnv* env, jobject clazz,
@@ -375,7 +380,12 @@ static void android_view_GLES20Canvas_drawBitmapMatrix(JNIEnv* env, jobject claz
DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererPtr);
SkMatrix* matrix = reinterpret_cast<SkMatrix*>(matrixPtr);
Paint* paint = reinterpret_cast<Paint*>(paintPtr);
- renderer->drawBitmap(bitmap, *matrix, paint);
+
+ // apply transform directly to canvas, so it affects shaders correctly
+ renderer->save(SkCanvas::kMatrix_SaveFlag);
+ renderer->concatMatrix(*matrix);
+ renderer->drawBitmap(bitmap, paint);
+ renderer->restore();
}
static void android_view_GLES20Canvas_drawBitmapData(JNIEnv* env, jobject clazz,
@@ -399,7 +409,12 @@ static void android_view_GLES20Canvas_drawBitmapData(JNIEnv* env, jobject clazz,
DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererPtr);
Paint* paint = reinterpret_cast<Paint*>(paintPtr);
- renderer->drawBitmapData(bitmap, left, top, paint);
+
+ // apply transform directly to canvas, so it affects shaders correctly
+ renderer->save(SkCanvas::kMatrix_SaveFlag);
+ renderer->translate(left, top);
+ renderer->drawBitmapData(bitmap, paint);
+ renderer->restore();
// Note - bitmap isn't deleted as DisplayListRenderer owns it now
}