Revert "inline common modecolorfilters"
This reverts commit c8b6828d4f
.
Reason for revert: looks like this messed up colorcomposefilter_wacky and colorcomposefilter_alpha. I suspect we're missing a swap_rb or two.
Original change's description:
> inline common modecolorfilters
>
> *seems* like we won't trigger layout tests, since chrome only uses Src, SrcIn and Modulate.
> Bug: skia:
> Change-Id: Ieae7e85bd3f2d23278b0405c2a5d64dbad1e0739
> Reviewed-on: https://skia-review.googlesource.com/19551
> Reviewed-by: Mike Klein <mtklein@chromium.org>
> Commit-Queue: Mike Klein <mtklein@chromium.org>
TBR=mtklein@chromium.org,mtklein@google.com,reed@google.com
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:
Change-Id: I7fc28e0f1e65c69be328ade32fbef078dbe99402
Reviewed-on: https://skia-review.googlesource.com/19555
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
This commit is contained in:
parent
c8b6828d4f
commit
4049dffaa8
@ -64,34 +64,10 @@ uint32_t SkModeColorFilter::getFlags() const {
|
||||
|
||||
void SkModeColorFilter::filterSpan(const SkPMColor shader[], int count, SkPMColor result[]) const {
|
||||
SkPMColor color = fPMColor;
|
||||
SkXfermodeProc proc = SkXfermode::GetProc(fMode);
|
||||
|
||||
switch (fMode) {
|
||||
case SkBlendMode::kSrc:
|
||||
sk_memset32(result, color, count);
|
||||
break;
|
||||
case SkBlendMode::kSrcIn:
|
||||
for (int i = 0; i < count; ++i) {
|
||||
result[i] = SkAlphaMulQ(color, SkAlpha255To256(SkGetPackedA32(shader[i])));
|
||||
}
|
||||
break;
|
||||
case SkBlendMode::kModulate:
|
||||
for (int i = 0; i < count; ++i) {
|
||||
int a = SkMulDiv255Round(SkGetPackedA32(color), SkGetPackedA32(shader[i]));
|
||||
int r = SkMulDiv255Round(SkGetPackedR32(color), SkGetPackedR32(shader[i]));
|
||||
int g = SkMulDiv255Round(SkGetPackedG32(color), SkGetPackedG32(shader[i]));
|
||||
int b = SkMulDiv255Round(SkGetPackedB32(color), SkGetPackedB32(shader[i]));
|
||||
result[i] = SkPackARGB32(a, r, g, b);
|
||||
}
|
||||
break;
|
||||
default: {
|
||||
SkSTArenaAlloc<256> alloc;
|
||||
SkRasterPipeline p(&alloc);
|
||||
|
||||
p.append(SkRasterPipeline::load_8888, &shader);
|
||||
this->appendStages(&p, nullptr, &alloc, false);
|
||||
p.append(SkRasterPipeline::store_8888, &result);
|
||||
p.run(0, 0, count);
|
||||
} break;
|
||||
for (int i = 0; i < count; i++) {
|
||||
result[i] = proc(color, shader[i]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -156,6 +132,32 @@ sk_sp<GrFragmentProcessor> SkModeColorFilter::asFragmentProcessor(
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
class Src_SkModeColorFilter final : public SkModeColorFilter {
|
||||
public:
|
||||
Src_SkModeColorFilter(SkColor color) : INHERITED(color, SkBlendMode::kSrc) {}
|
||||
|
||||
void filterSpan(const SkPMColor shader[], int count, SkPMColor result[]) const override {
|
||||
sk_memset32(result, this->getPMColor(), count);
|
||||
}
|
||||
|
||||
private:
|
||||
typedef SkModeColorFilter INHERITED;
|
||||
};
|
||||
|
||||
class SrcOver_SkModeColorFilter final : public SkModeColorFilter {
|
||||
public:
|
||||
SrcOver_SkModeColorFilter(SkColor color) : INHERITED(color, SkBlendMode::kSrcOver) { }
|
||||
|
||||
void filterSpan(const SkPMColor shader[], int count, SkPMColor result[]) const override {
|
||||
SkBlitRow::Color32(result, shader, count, this->getPMColor());
|
||||
}
|
||||
|
||||
private:
|
||||
typedef SkModeColorFilter INHERITED;
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
sk_sp<SkColorFilter> SkColorFilter::MakeModeFilter(SkColor color, SkBlendMode mode) {
|
||||
if (!SkIsValidMode(mode)) {
|
||||
return nullptr;
|
||||
@ -189,5 +191,12 @@ sk_sp<SkColorFilter> SkColorFilter::MakeModeFilter(SkColor color, SkBlendMode mo
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
switch (mode) {
|
||||
case SkBlendMode::kSrc:
|
||||
return sk_make_sp<Src_SkModeColorFilter>(color);
|
||||
case SkBlendMode::kSrcOver:
|
||||
return sk_make_sp<SrcOver_SkModeColorFilter>(color);
|
||||
default:
|
||||
return SkModeColorFilter::Make(color, mode);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user