OLD | NEW |
1 #ifndef SkXfermode_proccoeff_DEFINED | 1 #ifndef SkXfermode_proccoeff_DEFINED |
2 #define SkXfermode_proccoeff_DEFINED | 2 #define SkXfermode_proccoeff_DEFINED |
3 | 3 |
4 #include "SkXfermode.h" | 4 #include "SkXfermode.h" |
5 #include "SkFlattenableBuffers.h" | 5 #include "SkFlattenableBuffers.h" |
6 | 6 |
7 struct ProcCoeff { | 7 struct ProcCoeff { |
8 SkXfermodeProc fProc; | 8 SkXfermodeProc fProc; |
9 SkXfermode::Coeff fSC; | 9 SkXfermode::Coeff fSC; |
10 SkXfermode::Coeff fDC; | 10 SkXfermode::Coeff fDC; |
11 }; | 11 }; |
12 | 12 |
13 #define CANNOT_USE_COEFF SkXfermode::Coeff(-1) | 13 #define CANNOT_USE_COEFF SkXfermode::Coeff(-1) |
14 | 14 |
15 extern const ProcCoeff gProcCoeffs[]; | |
16 | |
17 class SkProcCoeffXfermode : public SkProcXfermode { | 15 class SkProcCoeffXfermode : public SkProcXfermode { |
18 public: | 16 public: |
19 SkProcCoeffXfermode(const ProcCoeff& rec, Mode mode) | 17 SkProcCoeffXfermode(const ProcCoeff& rec, Mode mode) |
20 : INHERITED(rec.fProc) { | 18 : INHERITED(rec.fProc) { |
21 fMode = mode; | 19 fMode = mode; |
22 // these may be valid, or may be CANNOT_USE_COEFF | 20 // these may be valid, or may be CANNOT_USE_COEFF |
23 fSrcCoeff = rec.fSC; | 21 fSrcCoeff = rec.fSC; |
24 fDstCoeff = rec.fDC; | 22 fDstCoeff = rec.fDC; |
25 } | 23 } |
26 | 24 |
27 virtual bool asMode(Mode* mode) const SK_OVERRIDE; | 25 virtual bool asMode(Mode* mode) const SK_OVERRIDE; |
28 | 26 |
29 virtual bool asCoeff(Coeff* sc, Coeff* dc) const SK_OVERRIDE; | 27 virtual bool asCoeff(Coeff* sc, Coeff* dc) const SK_OVERRIDE; |
30 | 28 |
31 #if SK_SUPPORT_GPU | 29 #if SK_SUPPORT_GPU |
32 virtual bool asNewEffect(GrEffectRef** effect, | 30 virtual bool asNewEffect(GrEffectRef** effect, |
33 GrTexture* background) const SK_OVERRIDE; | 31 GrTexture* background) const SK_OVERRIDE; |
34 #endif | 32 #endif |
35 | 33 |
36 SK_DEVELOPER_TO_STRING() | 34 SK_DEVELOPER_TO_STRING() |
37 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkProcCoeffXfermode) | 35 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkProcCoeffXfermode) |
38 | 36 |
39 protected: | 37 protected: |
40 SkProcCoeffXfermode(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) { | 38 SkProcCoeffXfermode(SkFlattenableReadBuffer& buffer); |
41 fMode = (SkXfermode::Mode)buffer.read32(); | |
42 | |
43 const ProcCoeff& rec = gProcCoeffs[fMode]; | |
44 // these may be valid, or may be CANNOT_USE_COEFF | |
45 fSrcCoeff = rec.fSC; | |
46 fDstCoeff = rec.fDC; | |
47 // now update our function-ptr in the super class | |
48 this->INHERITED::setProc(rec.fProc); | |
49 } | |
50 | 39 |
51 virtual void flatten(SkFlattenableWriteBuffer& buffer) const SK_OVERRIDE; | 40 virtual void flatten(SkFlattenableWriteBuffer& buffer) const SK_OVERRIDE; |
52 | 41 |
53 Mode getMode() const { | 42 Mode getMode() const { |
54 return fMode; | 43 return fMode; |
55 } | 44 } |
56 | 45 |
57 private: | 46 private: |
58 Mode fMode; | 47 Mode fMode; |
59 Coeff fSrcCoeff, fDstCoeff; | 48 Coeff fSrcCoeff, fDstCoeff; |
60 | 49 |
61 typedef SkProcXfermode INHERITED; | 50 typedef SkProcXfermode INHERITED; |
62 }; | 51 }; |
63 | 52 |
64 #endif // #ifndef SkXfermode_proccoeff_DEFINED | 53 #endif // #ifndef SkXfermode_proccoeff_DEFINED |
OLD | NEW |