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 "SkBlendMode.h"
12 #include "SkColor.h"
13 #include "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 "GrXferProcessor.h"
47 const GrXPFactory* SkBlendMode_AsXPFactory(SkBlendMode);
48 #endif
49
50 #endif
51