1 /* 2 * Copyright 2015 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef SkXfermode_proccoeff_DEFINED 9 #define SkXfermode_proccoeff_DEFINED 10 11 #include "SkReadBuffer.h" 12 #include "SkWriteBuffer.h" 13 14 struct ProcCoeff { 15 SkXfermodeProc fProc; 16 SkXfermodeProc4f fProc4f; 17 SkXfermode::Coeff fSC; 18 SkXfermode::Coeff fDC; 19 }; 20 21 #define CANNOT_USE_COEFF SkXfermode::Coeff(-1) 22 23 class SK_API SkProcCoeffXfermode : public SkXfermode { 24 public: SkProcCoeffXfermode(const ProcCoeff & rec,SkBlendMode mode)25 SkProcCoeffXfermode(const ProcCoeff& rec, SkBlendMode mode) { 26 fMode = mode; 27 fProc = rec.fProc; 28 // these may be valid, or may be CANNOT_USE_COEFF 29 fSrcCoeff = rec.fSC; 30 fDstCoeff = rec.fDC; 31 } 32 33 void xfer32(SkPMColor dst[], const SkPMColor src[], int count, 34 const SkAlpha aa[]) const override; 35 void xfer16(uint16_t dst[], const SkPMColor src[], int count, 36 const SkAlpha aa[]) const override; 37 void xferA8(SkAlpha dst[], const SkPMColor src[], int count, 38 const SkAlpha aa[]) const override; 39 40 bool asMode(Mode* mode) const override; 41 42 bool supportsCoverageAsAlpha() const override; 43 44 bool isOpaque(SkXfermode::SrcColorOpacity opacityType) const override; 45 46 #if SK_SUPPORT_GPU 47 sk_sp<GrFragmentProcessor> makeFragmentProcessorForImageFilter( 48 sk_sp<GrFragmentProcessor>) const override; 49 const GrXPFactory* asXPFactory() const override; 50 #endif 51 52 SK_TO_STRING_OVERRIDE() 53 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkProcCoeffXfermode) 54 55 protected: 56 void flatten(SkWriteBuffer& buffer) const override; 57 getMode()58 SkBlendMode getMode() const { return fMode; } 59 getProc()60 SkXfermodeProc getProc() const { return fProc; } 61 62 private: 63 SkXfermodeProc fProc; 64 SkBlendMode fMode; 65 Coeff fSrcCoeff, fDstCoeff; 66 67 friend class SkXfermode; 68 69 typedef SkXfermode INHERITED; 70 }; 71 72 #endif // #ifndef SkXfermode_proccoeff_DEFINED 73