aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/core/SkModeColorFilter.cpp15
-rw-r--r--src/core/SkModeColorFilter.h20
-rw-r--r--src/core/SkOpts.h2
-rw-r--r--src/core/SkPM4f.h2
-rw-r--r--src/core/SkXfermode.cpp2
-rw-r--r--src/opts/SkXfermode_opts.h23
6 files changed, 22 insertions, 42 deletions
diff --git a/src/core/SkModeColorFilter.cpp b/src/core/SkModeColorFilter.cpp
index edf38d269f..7e93747f10 100644
--- a/src/core/SkModeColorFilter.cpp
+++ b/src/core/SkModeColorFilter.cpp
@@ -24,6 +24,13 @@
//////////////////////////////////////////////////////////////////////////////////////////////////
+SkModeColorFilter::SkModeColorFilter(SkColor color, SkBlendMode mode) {
+ fColor = color;
+ fMode = mode;
+ // cache
+ fPMColor = SkPreMultiplyColor(fColor);
+}
+
#ifndef SK_IGNORE_TO_STRING
void SkModeColorFilter::toString(SkString* str) const {
str->append("SkModeColorFilter: color: 0x");
@@ -57,7 +64,7 @@ uint32_t SkModeColorFilter::getFlags() const {
void SkModeColorFilter::filterSpan(const SkPMColor shader[], int count, SkPMColor result[]) const {
SkPMColor color = fPMColor;
- SkXfermodeProc proc = fProc;
+ SkXfermodeProc proc = SkXfermode::GetProc(fMode);
for (int i = 0; i < count; i++) {
result[i] = proc(color, shader[i]);
@@ -69,12 +76,6 @@ void SkModeColorFilter::flatten(SkWriteBuffer& buffer) const {
buffer.writeUInt((int)fMode);
}
-void SkModeColorFilter::updateCache() {
- fPMColor = SkPreMultiplyColor(fColor);
- fProc = SkXfermode::GetProc(fMode);
- fPMColor4f = SkColor4f::FromColor(fColor).premul();
-}
-
sk_sp<SkFlattenable> SkModeColorFilter::CreateProc(SkReadBuffer& buffer) {
SkColor color = buffer.readColor();
SkBlendMode mode = (SkBlendMode)buffer.readUInt();
diff --git a/src/core/SkModeColorFilter.h b/src/core/SkModeColorFilter.h
index 66dda38653..afff93c772 100644
--- a/src/core/SkModeColorFilter.h
+++ b/src/core/SkModeColorFilter.h
@@ -6,7 +6,6 @@
*/
#include "SkColorFilter.h"
-#include "SkPM4f.h"
#ifndef SkModeColorFilter_DEFINED
#define SkModeColorFilter_DEFINED
@@ -18,7 +17,6 @@ public:
}
SkColor getColor() const { return fColor; }
- SkBlendMode getMode() const { return fMode; }
SkPMColor getPMColor() const { return fPMColor; }
bool asColorMode(SkColor*, SkBlendMode*) const override;
@@ -35,11 +33,7 @@ public:
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkModeColorFilter)
protected:
- SkModeColorFilter(SkColor color, SkBlendMode mode) {
- fColor = color;
- fMode = mode;
- this->updateCache();
- }
+ SkModeColorFilter(SkColor color, SkBlendMode mode);
void flatten(SkWriteBuffer&) const override;
@@ -48,17 +42,11 @@ protected:
sk_sp<SkColorFilter> onMakeColorSpace(SkColorSpaceXformer*) const override;
- // cache
- SkPM4f fPMColor4f;
-
private:
- SkColor fColor;
- SkBlendMode fMode;
+ SkColor fColor;
+ SkBlendMode fMode;
// cache
- SkPMColor fPMColor;
- SkXfermodeProc fProc;
-
- void updateCache();
+ SkPMColor fPMColor;
friend class SkColorFilter;
diff --git a/src/core/SkOpts.h b/src/core/SkOpts.h
index 4c744e8d67..a4f1ea284c 100644
--- a/src/core/SkOpts.h
+++ b/src/core/SkOpts.h
@@ -24,7 +24,7 @@ namespace SkOpts {
// Declare function pointers here...
// May return nullptr if we haven't specialized the given Mode.
- extern SkXfermode* (*create_xfermode)(SkXfermodeProc, SkBlendMode);
+ extern SkXfermode* (*create_xfermode)(SkBlendMode);
typedef void (*BoxBlur)(const SkPMColor*, int, const SkIRect& srcBounds, SkPMColor*, int, int, int, int, int);
extern BoxBlur box_blur_xx, box_blur_xy, box_blur_yx;
diff --git a/src/core/SkPM4f.h b/src/core/SkPM4f.h
index ab2258b328..82a6f1275f 100644
--- a/src/core/SkPM4f.h
+++ b/src/core/SkPM4f.h
@@ -78,6 +78,4 @@ struct SkPM4f {
#endif
};
-typedef SkPM4f (*SkXfermodeProc4f)(const SkPM4f& src, const SkPM4f& dst);
-
#endif
diff --git a/src/core/SkXfermode.cpp b/src/core/SkXfermode.cpp
index 1d5cac3a86..0dd9e87cdf 100644
--- a/src/core/SkXfermode.cpp
+++ b/src/core/SkXfermode.cpp
@@ -719,7 +719,7 @@ sk_sp<SkXfermode> SkXfermode::Make(SkBlendMode mode) {
once[(int)mode]([mode] {
SkXfermodeProc proc = gProcs[(int)mode];
- if (auto xfermode = SkOpts::create_xfermode(proc, mode)) {
+ if (auto xfermode = SkOpts::create_xfermode(mode)) {
cached[(int)mode] = xfermode;
} else {
cached[(int)mode] = new SkProcCoeffXfermode(proc, mode);
diff --git a/src/opts/SkXfermode_opts.h b/src/opts/SkXfermode_opts.h
index 85715fad3e..c8fe384f09 100644
--- a/src/opts/SkXfermode_opts.h
+++ b/src/opts/SkXfermode_opts.h
@@ -11,7 +11,7 @@
#include "Sk4px.h"
#include "SkMSAN.h"
#include "SkNx.h"
-#include "SkXfermode_proccoeff.h"
+#include "SkXfermodePriv.h"
namespace {
@@ -215,10 +215,9 @@ template <> void mark_dst_initialized_if_safe<Clear>(void* dst, void* end) {
}
template <typename Xfermode>
-class Sk4pxXfermode : public SkProcCoeffXfermode {
+class Sk4pxXfermode : public SkXfermode {
public:
- Sk4pxXfermode(SkXfermodeProc proc, SkBlendMode mode)
- : INHERITED(proc, mode) {}
+ Sk4pxXfermode() {}
void xfer32(SkPMColor dst[], const SkPMColor src[], int n, const SkAlpha aa[]) const override {
mark_dst_initialized_if_safe<Xfermode>(dst, dst+n);
@@ -228,16 +227,12 @@ public:
Sk4px::MapDstSrcAlpha(n, dst, src, aa, xfer_aa<Xfermode>);
}
}
-
-private:
- typedef SkProcCoeffXfermode INHERITED;
};
template <typename Xfermode>
-class Sk4fXfermode : public SkProcCoeffXfermode {
+class Sk4fXfermode : public SkXfermode {
public:
- Sk4fXfermode(SkXfermodeProc proc, SkBlendMode mode)
- : INHERITED(proc, mode) {}
+ Sk4fXfermode() {}
void xfer32(SkPMColor dst[], const SkPMColor src[], int n, const SkAlpha aa[]) const override {
for (int i = 0; i < n; i++) {
@@ -266,18 +261,16 @@ private:
SkNx_cast<uint8_t>(f * Sk4f(255) + Sk4f(0.5f)).store(&c);
return c;
}
-
- typedef SkProcCoeffXfermode INHERITED;
};
} // namespace
namespace SK_OPTS_NS {
-static SkXfermode* create_xfermode(SkXfermodeProc proc, SkBlendMode mode) {
+static SkXfermode* create_xfermode(SkBlendMode mode) {
switch (mode) {
#define CASE(Xfermode) \
- case SkBlendMode::k##Xfermode: return new Sk4pxXfermode<Xfermode>(proc, mode)
+ case SkBlendMode::k##Xfermode: return new Sk4pxXfermode<Xfermode>()
CASE(Clear);
CASE(Src);
CASE(Dst);
@@ -303,7 +296,7 @@ static SkXfermode* create_xfermode(SkXfermodeProc proc, SkBlendMode mode) {
#undef CASE
#define CASE(Xfermode) \
- case SkBlendMode::k##Xfermode: return new Sk4fXfermode<Xfermode>(proc, mode)
+ case SkBlendMode::k##Xfermode: return new Sk4fXfermode<Xfermode>()
CASE(ColorDodge);
CASE(ColorBurn);
CASE(SoftLight);