1 /*
2  * Copyright 2016 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 SkBlendModePriv_DEFINED
9 #define SkBlendModePriv_DEFINED
10 
11 #include "include/core/SkBlendMode.h"
12 #include "include/core/SkColor.h"
13 #include "include/private/SkColorData.h"
14 
15 class SkRasterPipeline;
16 
17 bool SkBlendMode_SupportsCoverageAsAlpha(SkBlendMode);
18 
SkBlendMode_CaresAboutRBOrder(SkBlendMode mode)19 static inline bool SkBlendMode_CaresAboutRBOrder(SkBlendMode mode) {
20     return (mode > SkBlendMode::kLastSeparableMode);
21 }
22 
23 bool SkBlendMode_ShouldPreScaleCoverage(SkBlendMode, bool rgb_coverage);
24 void SkBlendMode_AppendStages(SkBlendMode, SkRasterPipeline*);
25 
26 enum class SkBlendModeCoeff {
27     kZero, /** 0 */
28     kOne,  /** 1 */
29     kSC,   /** src color */
30     kISC,  /** inverse src color (i.e. 1 - sc) */
31     kDC,   /** dst color */
32     kIDC,  /** inverse dst color (i.e. 1 - dc) */
33     kSA,   /** src alpha */
34     kISA,  /** inverse src alpha (i.e. 1 - sa) */
35     kDA,   /** dst alpha */
36     kIDA,  /** inverse dst alpha (i.e. 1 - da) */
37 
38     kCoeffCount
39 };
40 
41 bool SkBlendMode_AsCoeff(SkBlendMode mode, SkBlendModeCoeff* src, SkBlendModeCoeff* dst);
42 
43 SkPMColor4f SkBlendMode_Apply(SkBlendMode, const SkPMColor4f& src, const SkPMColor4f& dst);
44 
45 #if SK_SUPPORT_GPU
46 #include "src/gpu/GrXferProcessor.h"
47 const GrXPFactory* SkBlendMode_AsXPFactory(SkBlendMode);
48 #endif
49 
50 #endif
51