add shader flag kConstInY_Flag
this signals blitters that the shader will return the same results for a given
x value, independent of y. Useful inside blitRect(), where it can cache the
first call to shadeSpan() and reuse it on all subsequent scans. Works with
(non-rotated) linear-gradients, and Nx1 bitmaps.
git-svn-id: http://skia.googlecode.com/svn/trunk@214 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/core/SkShader.cpp b/src/core/SkShader.cpp
index dd9c859..5567914 100644
--- a/src/core/SkShader.cpp
+++ b/src/core/SkShader.cpp
@@ -210,6 +210,7 @@
#include "SkUtils.h"
SkColorShader::SkColorShader(SkFlattenableReadBuffer& b) : INHERITED(b) {
+ fFlags = 0; // computed in setContext
fInheritColor = b.readU8();
if (fInheritColor) {
return;
@@ -226,11 +227,6 @@
buffer.write32(fColor);
}
-uint32_t SkColorShader::getFlags() {
- return (SkGetPackedA32(fPMColor) == 255 ? kOpaqueAlpha_Flag : 0) |
- kHasSpan16_Flag;
-}
-
uint8_t SkColorShader::getSpan16Alpha() const {
return SkGetPackedA32(fPMColor);
}
@@ -267,6 +263,11 @@
}
fPMColor = SkPackARGB32(a, r, g, b);
+ fFlags = kHasSpan16_Flag | kConstInY_Flag;
+ if (SkGetPackedA32(fPMColor) == 255) {
+ fFlags |= kOpaqueAlpha_Flag;
+ }
+
return true;
}