SkXfermode_proccoeff.h revision 84cc1ebc5a4789e93e23c65eb4014ef5b8b0bab4
1#ifndef SkXfermode_proccoeff_DEFINED 2#define SkXfermode_proccoeff_DEFINED 3 4#include "SkXfermode.h" 5#include "SkFlattenableBuffers.h" 6 7struct ProcCoeff { 8 SkXfermodeProc fProc; 9 SkXfermode::Coeff fSC; 10 SkXfermode::Coeff fDC; 11}; 12 13#define CANNOT_USE_COEFF SkXfermode::Coeff(-1) 14 15extern const ProcCoeff gProcCoeffs[]; 16 17class SkProcCoeffXfermode : public SkProcXfermode { 18public: 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 42protected: 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 56private: 57 Mode fMode; 58 Coeff fSrcCoeff, fDstCoeff; 59 60 typedef SkProcXfermode INHERITED; 61}; 62 63#endif // #ifndef SkXfermode_proccoeff_DEFINED 64