diff options
author | 2012-11-16 13:20:41 +0000 | |
---|---|---|
committer | 2012-11-16 13:20:41 +0000 | |
commit | 13201e74f43b9c5fa173339eb36de515370e6973 (patch) | |
tree | ad3bfadb567b997c0a501288a8b97b44e7ef107b /src/core/SkBlitter.cpp | |
parent | b1c42bbdcff20257b30d155fe014d3e04233de45 (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.cpp | 15 |
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) { |