blob: e595e1e1ac9661d92bbdff5f76026ad132476d7e [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"
#include <memory>
class GrFragmentProcessor;
namespace GrBlendFragmentProcessor {
/**
* Blends src and dst inputs according to the blend mode. If either input is null, fInputColor is
* used instead.
* - When `shareBlendLogic` is false, the blend function logic is written directly into the code.
* - When `shareBlendLogic` is true, most Porter-Duff blends share the same code, and a uniform
* is used to pick the blend type. This can reduce our overall shader count.
*/
std::unique_ptr<GrFragmentProcessor> Make(std::unique_ptr<GrFragmentProcessor> src,
std::unique_ptr<GrFragmentProcessor> dst,
SkBlendMode mode,
bool shareBlendLogic = true);
/**
* Blends src and dst inputs according to the blend mode. If either input is null, fInputColor is
* used instead. Hard-wires a single blend mode into the code (slightly reducing complexity).
*/
template <SkBlendMode mode>
std::unique_ptr<GrFragmentProcessor> Make(std::unique_ptr<GrFragmentProcessor> src,
std::unique_ptr<GrFragmentProcessor> dst) {
return Make(std::move(src), std::move(dst), mode, /*shareBlendLogic=*/false);
}
} // namespace GrBlendFragmentProcessor
#endif