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