2 * Copyright 2015 Google Inc.
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
8 #ifndef SkXfermode_proccoeff_DEFINED
9 #define SkXfermode_proccoeff_DEFINED
11 #include "SkXfermode.h"
12 #include "SkReadBuffer.h"
13 #include "SkWriteBuffer.h"
17 SkXfermodeProc4f fProc4f;
18 SkXfermode::Coeff fSC;
19 SkXfermode::Coeff fDC;
22 #define CANNOT_USE_COEFF SkXfermode::Coeff(-1)
24 class SK_API SkProcCoeffXfermode : public SkXfermode {
26 SkProcCoeffXfermode(const ProcCoeff& rec, Mode mode) {
29 // these may be valid, or may be CANNOT_USE_COEFF
34 void xfer32(SkPMColor dst[], const SkPMColor src[], int count,
35 const SkAlpha aa[]) const override;
36 void xfer16(uint16_t dst[], const SkPMColor src[], int count,
37 const SkAlpha aa[]) const override;
38 void xferA8(SkAlpha dst[], const SkPMColor src[], int count,
39 const SkAlpha aa[]) const override;
41 bool asMode(Mode* mode) const override;
43 bool supportsCoverageAsAlpha() const override;
45 bool isOpaque(SkXfermode::SrcColorOpacity opacityType) const override;
48 sk_sp<GrFragmentProcessor> makeFragmentProcessorForImageFilter(
49 sk_sp<GrFragmentProcessor>) const override;
50 sk_sp<GrXPFactory> asXPFactory() const override;
53 SK_TO_STRING_OVERRIDE()
54 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkProcCoeffXfermode)
57 void flatten(SkWriteBuffer& buffer) const override;
59 Mode getMode() const { return fMode; }
61 SkXfermodeProc getProc() const { return fProc; }
66 Coeff fSrcCoeff, fDstCoeff;
68 friend class SkXfermode;
70 typedef SkXfermode INHERITED;
73 #endif // #ifndef SkXfermode_proccoeff_DEFINED