Index: include/core/SkXfermode.h |
diff --git a/include/core/SkXfermode.h b/include/core/SkXfermode.h |
index 04630e75f6901d983a24bcdad082f169b69c96a2..2c4da5f999fd17b1737a2f258e2bbb336671750a 100644 |
--- a/include/core/SkXfermode.h |
+++ b/include/core/SkXfermode.h |
@@ -220,38 +220,23 @@ public: |
SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP() |
SK_DEFINE_FLATTENABLE_TYPE(SkXfermode) |
- enum PM4fFlags { |
- kSrcIsOpaque_PM4fFlag = 1 << 0, |
- kDstIsSRGB_PM4fFlag = 1 << 1, |
+ enum D32Flags { |
+ kSrcIsOpaque_D32Flag = 1 << 0, |
+ kSrcIsSingle_D32Flag = 1 << 1, |
+ kDstIsSRGB_D32Flag = 1 << 2, |
}; |
- struct PM4fState { |
- const SkXfermode* fXfer; |
- uint32_t fFlags; |
+ typedef void (*D32Proc)(const SkXfermode*, uint32_t dst[], const SkPM4f src[], |
+ int count, const SkAlpha coverage[]); |
+ static D32Proc GetD32Proc(SkXfermode*, uint32_t flags); |
+ |
+ enum D64Flags { |
+ kSrcIsOpaque_D64Flag = 1 << 0, |
+ kSrcIsSingle_D64Flag = 1 << 1, |
+ kDstIsFloat16_D64Flag = 1 << 2, // else U16 bit components |
}; |
- typedef void (*PM4fProc1)(const PM4fState&, uint32_t dst[], const SkPM4f& src, |
- int count, const SkAlpha coverage[]); |
- typedef void (*PM4fProcN)(const PM4fState&, uint32_t dst[], const SkPM4f src[], |
- int count, const SkAlpha coverage[]); |
- |
- static PM4fProc1 GetPM4fProc1(Mode, uint32_t flags); |
- static PM4fProcN GetPM4fProcN(Mode, uint32_t flags); |
- virtual PM4fProc1 getPM4fProc1(uint32_t flags) const; |
- virtual PM4fProcN getPM4fProcN(uint32_t flags) const; |
- |
- enum U64Flags { |
- kSrcIsOpaque_U64Flag = 1 << 0, |
- kDstIsFloat16_U64Flag = 1 << 1, // else U16 bit components |
- }; |
- struct U64State { |
- const SkXfermode* fXfer; |
- uint32_t fFlags; |
- }; |
- typedef void (*U64Proc1)(const U64State&, uint64_t dst[], const SkPM4f& src, int count, |
- const SkAlpha coverage[]); |
- typedef void (*U64ProcN)(const U64State&, uint64_t dst[], const SkPM4f src[], int count, |
- const SkAlpha coverage[]); |
- static U64Proc1 GetU64Proc1(Mode, uint32_t flags); |
- static U64ProcN GetU64ProcN(Mode, uint32_t flags); |
+ typedef void (*D64Proc)(const SkXfermode*, uint64_t dst[], const SkPM4f src[], int count, |
+ const SkAlpha coverage[]); |
+ static D64Proc GetD64Proc(SkXfermode*, uint32_t flags); |
enum LCDFlags { |
kSrcIsOpaque_LCDFlag = 1 << 0, // else src(s) may have alpha < 1 |
@@ -275,6 +260,9 @@ protected: |
*/ |
virtual SkPMColor xferColor(SkPMColor src, SkPMColor dst) const; |
+ virtual D32Proc onGetD32Proc(uint32_t flags) const; |
+ virtual D64Proc onGetD64Proc(uint32_t flags) const; |
+ |
private: |
enum { |
kModeCount = kLastMode + 1 |