• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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