#ifndef GrFragmentProcessors_DEFINED
#define GrFragmentProcessors_DEFINED
#include "include/effects/SkRuntimeEffect.h"
#include <tuple>
#include <memory>
class GrColorInfo;
class GrFragmentProcessor;
class GrRecordingContext;
class SkBlenderBase;
class SkColorFilter;
class SkMaskFilter;
class SkMatrix;
class SkSurfaceProps;
class SkShader;
struct GrFPArgs;
using GrFPResult = std::tuple<bool, std::unique_ptr<GrFragmentProcessor>>;
namespace SkShaders {
class MatrixRec;
}
namespace GrFragmentProcessors {
std::unique_ptr<GrFragmentProcessor> Make(const SkBlenderBase*,
std::unique_ptr<GrFragmentProcessor> srcFP,
std::unique_ptr<GrFragmentProcessor> dstFP,
const GrFPArgs& fpArgs);
GrFPResult Make(GrRecordingContext*,
const SkColorFilter*,
std::unique_ptr<GrFragmentProcessor> inputFP,
const GrColorInfo& dstColorInfo,
const SkSurfaceProps&);
std::unique_ptr<GrFragmentProcessor> Make(const SkMaskFilter*,
const GrFPArgs&,
const SkMatrix& ctm);
bool IsSupported(const SkMaskFilter*);
std::unique_ptr<GrFragmentProcessor> Make(const SkShader*, const GrFPArgs&, const SkMatrix& ctm);
std::unique_ptr<GrFragmentProcessor> Make(const SkShader*,
const GrFPArgs&,
const SkShaders::MatrixRec&);
GrFPResult MakeChildFP(const SkRuntimeEffect::ChildPtr& child, const GrFPArgs& childArgs);
}
#endif