blob: 8de432c76fb030dac6e13ea762055ca77d628be9 [file] [log] [blame]
/*
* Copyright 2015 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef GrBlendFragmentProcessor_DEFINED
#define GrBlendFragmentProcessor_DEFINED
#include "include/core/SkBlendMode.h"
#include "include/core/SkRefCnt.h"
class GrFragmentProcessor;
namespace GrBlendFragmentProcessor {
// TODO(skbug.com/10457): Standardize on a single blend behavior
enum class BlendBehavior {
// Picks "ComposeOne" or "ComposeTwo" automatically depending on presence of src/dst FPs.
kDefault = 0,
// half(1) is passed as the input color to child FPs. No alpha channel trickery.
kComposeOneBehavior,
// sk_InColor.rgb1 is passed as the input color to child FPs. Alpha is manually blended.
kComposeTwoBehavior,
// half(1) is passed to src; sk_InColor.rgba is passed to dst. No alpha channel trickery.
kSkModeBehavior,
kLastBlendBehavior = kSkModeBehavior,
};
/** Blends src and dst inputs according to the blend mode.
* If either input is null, the input color (sk_InColor) is used instead.
*/
std::unique_ptr<GrFragmentProcessor> Make(std::unique_ptr<GrFragmentProcessor> src,
std::unique_ptr<GrFragmentProcessor> dst,
SkBlendMode mode,
BlendBehavior behavior = BlendBehavior::kDefault);
};
#endif