diff options
author | Chris Craik <ccraik@google.com> | 2014-08-06 13:42:24 -0700 |
---|---|---|
committer | Chris Craik <ccraik@google.com> | 2014-08-06 21:11:31 +0000 |
commit | 796475006f5d670e8383a2050f11719522437a43 (patch) | |
tree | b7c017f959a270bf1e106b9e65f1b037fa54f584 /core/jni | |
parent | d1a7fca1451bf4ab7f9b704c0bace180095c2237 (diff) | |
download | frameworks_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.cpp | 21 |
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 } |