diff options
-rw-r--r-- | src/core/SkModeColorFilter.cpp | 15 | ||||
-rw-r--r-- | src/core/SkModeColorFilter.h | 20 | ||||
-rw-r--r-- | src/core/SkOpts.h | 2 | ||||
-rw-r--r-- | src/core/SkPM4f.h | 2 | ||||
-rw-r--r-- | src/core/SkXfermode.cpp | 2 | ||||
-rw-r--r-- | src/opts/SkXfermode_opts.h | 23 |
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); |