From 2c323427cbcb1c294e4fbe6a55773bd67f2a2452 Mon Sep 17 00:00:00 2001 From: mtklein Date: Mon, 27 Jul 2015 12:07:29 -0700 Subject: [PATCH] No one calls SkXfermode::GetProc16 BUG=skia: Review URL: https://codereview.chromium.org/1253493002 --- include/core/SkColor.h | 5 -- include/core/SkXfermode.h | 7 -- src/core/SkXfermode.cpp | 173 ---------------------------------------------- 3 files changed, 185 deletions(-) diff --git a/include/core/SkColor.h b/include/core/SkColor.h index 7faeca7..4c1f9ff 100644 --- a/include/core/SkColor.h +++ b/include/core/SkColor.h @@ -161,9 +161,4 @@ SK_API SkPMColor SkPreMultiplyColor(SkColor c); */ typedef SkPMColor (*SkXfermodeProc)(SkPMColor src, SkPMColor dst); -/** Define a function pointer type for combining a premultiplied src color - and a 16bit device color. -*/ -typedef uint16_t (*SkXfermodeProc16)(SkPMColor src, uint16_t dst); - #endif diff --git a/include/core/SkXfermode.h b/include/core/SkXfermode.h index 31e9924..0b8f936 100644 --- a/include/core/SkXfermode.h +++ b/include/core/SkXfermode.h @@ -146,13 +146,6 @@ public: */ static SkXfermodeProc GetProc(Mode mode); - /** Return a function pointer to a routine that applies the specified - porter-duff transfer mode and srcColor to a 16bit device color. Note, - if the mode+srcColor might return a non-opaque color, then there is not - 16bit proc, and this will return NULL. - */ - static SkXfermodeProc16 GetProc16(Mode mode, SkColor srcColor); - /** * If the specified mode can be represented by a pair of Coeff, then return * true and set (if not NULL) the corresponding coeffs. If the mode is diff --git a/src/core/SkXfermode.cpp b/src/core/SkXfermode.cpp index eb711f1..46703aa 100644 --- a/src/core/SkXfermode.cpp +++ b/src/core/SkXfermode.cpp @@ -1113,179 +1113,6 @@ bool SkXfermode::IsOpaque(const SkXfermode* xfer, SrcColorOpacity opacityType) { return xfer->isOpaque(opacityType); } -/////////////////////////////////////////////////////////////////////////////// -//////////// 16bit xfermode procs - -#ifdef SK_DEBUG -static bool require_255(SkPMColor src) { return SkGetPackedA32(src) == 0xFF; } -static bool require_0(SkPMColor src) { return SkGetPackedA32(src) == 0; } -#endif - -static uint16_t src_modeproc16_255(SkPMColor src, uint16_t dst) { - SkASSERT(require_255(src)); - return SkPixel32ToPixel16(src); -} - -static uint16_t dst_modeproc16(SkPMColor src, uint16_t dst) { - return dst; -} - -static uint16_t srcover_modeproc16_0(SkPMColor src, uint16_t dst) { - SkASSERT(require_0(src)); - return dst; -} - -static uint16_t srcover_modeproc16_255(SkPMColor src, uint16_t dst) { - SkASSERT(require_255(src)); - return SkPixel32ToPixel16(src); -} - -static uint16_t dstover_modeproc16_0(SkPMColor src, uint16_t dst) { - SkASSERT(require_0(src)); - return dst; -} - -static uint16_t dstover_modeproc16_255(SkPMColor src, uint16_t dst) { - SkASSERT(require_255(src)); - return dst; -} - -static uint16_t srcin_modeproc16_255(SkPMColor src, uint16_t dst) { - SkASSERT(require_255(src)); - return SkPixel32ToPixel16(src); -} - -static uint16_t dstin_modeproc16_255(SkPMColor src, uint16_t dst) { - SkASSERT(require_255(src)); - return dst; -} - -static uint16_t dstout_modeproc16_0(SkPMColor src, uint16_t dst) { - SkASSERT(require_0(src)); - return dst; -} - -static uint16_t srcatop_modeproc16(SkPMColor src, uint16_t dst) { - unsigned isa = 255 - SkGetPackedA32(src); - - return SkPackRGB16( - SkPacked32ToR16(src) + SkAlphaMulAlpha(SkGetPackedR16(dst), isa), - SkPacked32ToG16(src) + SkAlphaMulAlpha(SkGetPackedG16(dst), isa), - SkPacked32ToB16(src) + SkAlphaMulAlpha(SkGetPackedB16(dst), isa)); -} - -static uint16_t srcatop_modeproc16_0(SkPMColor src, uint16_t dst) { - SkASSERT(require_0(src)); - return dst; -} - -static uint16_t srcatop_modeproc16_255(SkPMColor src, uint16_t dst) { - SkASSERT(require_255(src)); - return SkPixel32ToPixel16(src); -} - -static uint16_t dstatop_modeproc16_255(SkPMColor src, uint16_t dst) { - SkASSERT(require_255(src)); - return dst; -} - -/********* - darken and lighten boil down to this. - - darken = (1 - Sa) * Dc + min(Sc, Dc) - lighten = (1 - Sa) * Dc + max(Sc, Dc) - - if (Sa == 0) these become - darken = Dc + min(0, Dc) = 0 - lighten = Dc + max(0, Dc) = Dc - - if (Sa == 1) these become - darken = min(Sc, Dc) - lighten = max(Sc, Dc) -*/ - -static uint16_t darken_modeproc16_0(SkPMColor src, uint16_t dst) { - SkASSERT(require_0(src)); - return 0; -} - -static uint16_t darken_modeproc16_255(SkPMColor src, uint16_t dst) { - SkASSERT(require_255(src)); - unsigned r = SkFastMin32(SkPacked32ToR16(src), SkGetPackedR16(dst)); - unsigned g = SkFastMin32(SkPacked32ToG16(src), SkGetPackedG16(dst)); - unsigned b = SkFastMin32(SkPacked32ToB16(src), SkGetPackedB16(dst)); - return SkPackRGB16(r, g, b); -} - -static uint16_t lighten_modeproc16_0(SkPMColor src, uint16_t dst) { - SkASSERT(require_0(src)); - return dst; -} - -static uint16_t lighten_modeproc16_255(SkPMColor src, uint16_t dst) { - SkASSERT(require_255(src)); - unsigned r = SkMax32(SkPacked32ToR16(src), SkGetPackedR16(dst)); - unsigned g = SkMax32(SkPacked32ToG16(src), SkGetPackedG16(dst)); - unsigned b = SkMax32(SkPacked32ToB16(src), SkGetPackedB16(dst)); - return SkPackRGB16(r, g, b); -} - -struct Proc16Rec { - SkXfermodeProc16 fProc16_0; - SkXfermodeProc16 fProc16_255; - SkXfermodeProc16 fProc16_General; -}; - -static const Proc16Rec gModeProcs16[] = { - { NULL, NULL, NULL }, // CLEAR - { NULL, src_modeproc16_255, NULL }, - { dst_modeproc16, dst_modeproc16, dst_modeproc16 }, - { srcover_modeproc16_0, srcover_modeproc16_255, NULL }, - { dstover_modeproc16_0, dstover_modeproc16_255, NULL }, - { NULL, srcin_modeproc16_255, NULL }, - { NULL, dstin_modeproc16_255, NULL }, - { NULL, NULL, NULL },// SRC_OUT - { dstout_modeproc16_0, NULL, NULL }, - { srcatop_modeproc16_0, srcatop_modeproc16_255, srcatop_modeproc16 }, - { NULL, dstatop_modeproc16_255, NULL }, - { NULL, NULL, NULL }, // XOR - - { NULL, NULL, NULL }, // plus - { NULL, NULL, NULL }, // modulate - { NULL, NULL, NULL }, // screen - { NULL, NULL, NULL }, // overlay - { darken_modeproc16_0, darken_modeproc16_255, NULL }, // darken - { lighten_modeproc16_0, lighten_modeproc16_255, NULL }, // lighten - { NULL, NULL, NULL }, // colordodge - { NULL, NULL, NULL }, // colorburn - { NULL, NULL, NULL }, // hardlight - { NULL, NULL, NULL }, // softlight - { NULL, NULL, NULL }, // difference - { NULL, NULL, NULL }, // exclusion - { NULL, NULL, NULL }, // multiply - { NULL, NULL, NULL }, // hue - { NULL, NULL, NULL }, // saturation - { NULL, NULL, NULL }, // color - { NULL, NULL, NULL }, // luminosity -}; - -SkXfermodeProc16 SkXfermode::GetProc16(Mode mode, SkColor srcColor) { - SkXfermodeProc16 proc16 = NULL; - if ((unsigned)mode < kModeCount) { - const Proc16Rec& rec = gModeProcs16[mode]; - unsigned a = SkColorGetA(srcColor); - - if (0 == a) { - proc16 = rec.fProc16_0; - } else if (255 == a) { - proc16 = rec.fProc16_255; - } else { - proc16 = rec.fProc16_General; - } - } - return proc16; -} - SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode) SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode) SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END -- 2.7.4