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