Line data Source code
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 0 : class SK_API SkProcCoeffXfermode : public SkXfermode {
24 : public:
25 0 : SkProcCoeffXfermode(const ProcCoeff& rec, SkBlendMode mode) {
26 0 : fMode = mode;
27 0 : fProc = rec.fProc;
28 : // these may be valid, or may be CANNOT_USE_COEFF
29 0 : fSrcCoeff = rec.fSC;
30 0 : fDstCoeff = rec.fDC;
31 0 : }
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 0 : SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkProcCoeffXfermode)
54 :
55 : protected:
56 : void flatten(SkWriteBuffer& buffer) const override;
57 :
58 : SkBlendMode getMode() const { return fMode; }
59 :
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
|