Index: src/core/SkXfermode.cpp |
diff --git a/src/core/SkXfermode.cpp b/src/core/SkXfermode.cpp |
index eb711f1625cd44931f24830fbcfea4d740e38a11..46703aa6546e07a7cd5b0d9ac3b914acbe54b803 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 |