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