aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkBlitter.cpp
diff options
context:
space:
mode:
authorGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-11-16 13:20:41 +0000
committerGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-11-16 13:20:41 +0000
commit13201e74f43b9c5fa173339eb36de515370e6973 (patch)
treead3bfadb567b997c0a501288a8b97b44e7ef107b /src/core/SkBlitter.cpp
parentb1c42bbdcff20257b30d155fe014d3e04233de45 (diff)
fold kClear_Mode into kSrc_Mode, and make kSrc_Mode go faster
Review URL: https://codereview.appspot.com/6851054 git-svn-id: http://skia.googlecode.com/svn/trunk@6451 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/core/SkBlitter.cpp')
-rw-r--r--src/core/SkBlitter.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/core/SkBlitter.cpp b/src/core/SkBlitter.cpp
index cdb2b625a7..418665d711 100644
--- a/src/core/SkBlitter.cpp
+++ b/src/core/SkBlitter.cpp
@@ -871,6 +871,21 @@ SkBlitter* SkBlitter::Choose(const SkBitmap& device,
}
}
+#ifndef SK_IGNORE_FAST_SRCMODE
+ /*
+ * If the xfermode is CLEAR, then we can completely ignore the installed
+ * color/shader/colorfilter, and just pretend we're SRC + color==0. This
+ * will fall into our optimizations for SRC mode.
+ */
+ if (SkXfermode::IsMode(mode, SkXfermode::kClear_Mode)) {
+ SkPaint* p = paint.writable();
+ shader = p->setShader(NULL);
+ cf = p->setColorFilter(NULL);
+ mode = p->setXfermodeMode(SkXfermode::kSrc_Mode);
+ p->setColor(0);
+ }
+#endif
+
if (NULL == shader) {
#ifdef SK_IGNORE_CF_OPTIMIZATION
if (mode || cf) {