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 GrBlendFragmentProcessor_DEFINED
9#define GrBlendFragmentProcessor_DEFINED
10
11#include "include/core/SkBlendMode.h"
12#include "include/core/SkRefCnt.h"
13
14class GrFragmentProcessor;
15
16namespace GrBlendFragmentProcessor {
17
18// TODO(skbug.com/10457): Standardize on a single blend behavior
19enum class BlendBehavior {
20 // Picks "ComposeOne" or "ComposeTwo" automatically depending on presence of src/dst FPs.
21 kDefault = 0,
22
23 // half(1) is passed as the input color to child FPs. No alpha channel trickery.
24 kComposeOneBehavior,
25
26 // sk_InColor.rgb1 is passed as the input color to child FPs. Alpha is manually blended.
27 kComposeTwoBehavior,
28
29 // half(1) is passed to src; sk_InColor.rgba is passed to dst. No alpha channel trickery.
30 kSkModeBehavior,
31
32 kLastBlendBehavior = kSkModeBehavior,
33};
34
35/** Blends src and dst inputs according to the blend mode.
36 * If either input is null, the input color (sk_InColor) is used instead.
37 */
38std::unique_ptr<GrFragmentProcessor> Make(std::unique_ptr<GrFragmentProcessor> src,
39 std::unique_ptr<GrFragmentProcessor> dst,
40 SkBlendMode mode,
41 BlendBehavior behavior = BlendBehavior::kDefault);
42
43} // namespace GrBlendFragmentProcessor
44
45#endif
46