1 #ifndef SkXfermode_proccoeff_DEFINED 2 #define SkXfermode_proccoeff_DEFINED 3 4 #include "SkXfermode.h" 5 #include "SkReadBuffer.h" 6 #include "SkWriteBuffer.h" 7 8 struct ProcCoeff { 9 SkXfermodeProc fProc; 10 SkXfermode::Coeff fSC; 11 SkXfermode::Coeff fDC; 12 }; 13 14 #define CANNOT_USE_COEFF SkXfermode::Coeff(-1) 15 16 class SK_API SkProcCoeffXfermode : public SkXfermode { 17 public: 18 SkProcCoeffXfermode(const ProcCoeff& rec, Mode mode) { 19 fMode = mode; 20 fProc = rec.fProc; 21 // these may be valid, or may be CANNOT_USE_COEFF 22 fSrcCoeff = rec.fSC; 23 fDstCoeff = rec.fDC; 24 } 25 26 virtual void xfer32(SkPMColor dst[], const SkPMColor src[], int count, 27 const SkAlpha aa[]) const SK_OVERRIDE; 28 virtual void xfer16(uint16_t dst[], const SkPMColor src[], int count, 29 const SkAlpha aa[]) const SK_OVERRIDE; 30 virtual void xferA8(SkAlpha dst[], const SkPMColor src[], int count, 31 const SkAlpha aa[]) const SK_OVERRIDE; 32 33 virtual bool asMode(Mode* mode) const SK_OVERRIDE; 34 35 virtual bool asCoeff(Coeff* sc, Coeff* dc) const SK_OVERRIDE; 36 37 #if SK_SUPPORT_GPU 38 virtual bool asFragmentProcessor(GrFragmentProcessor**, 39 GrTexture* background) const SK_OVERRIDE; 40 #endif 41 42 SK_TO_STRING_OVERRIDE() 43 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkProcCoeffXfermode) 44 45 protected: 46 #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING 47 SkProcCoeffXfermode(SkReadBuffer& buffer); 48 #endif 49 50 virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE; 51 52 Mode getMode() const { return fMode; } 53 54 SkXfermodeProc getProc() const { return fProc; } 55 56 private: 57 SkXfermodeProc fProc; 58 Mode fMode; 59 Coeff fSrcCoeff, fDstCoeff; 60 61 friend class SkXfermode; 62 63 typedef SkXfermode INHERITED; 64 }; 65 66 #endif // #ifndef SkXfermode_proccoeff_DEFINED 67