| /* | |
| * Copyright 2023 Google LLC | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #ifndef GrFragmentProcessors_DEFINED | |
| #define GrFragmentProcessors_DEFINED | |
| #include "include/effects/SkRuntimeEffect.h" | |
| #include <tuple> | |
| #include <memory> | |
| class GrColorInfo; | |
| class GrFragmentProcessor; | |
| class SkBlenderBase; | |
| class SkColorFilter; | |
| class SkMaskFilter; | |
| class SkMatrix; | |
| class SkSurfaceProps; | |
| class SkShader; | |
| struct GrFPArgs; | |
| namespace skgpu::ganesh { class SurfaceDrawContext; } | |
| using GrFPResult = std::tuple<bool, std::unique_ptr<GrFragmentProcessor>>; | |
| namespace SkShaders { | |
| class MatrixRec; | |
| } | |
| namespace GrFragmentProcessors { | |
| /** | |
| * Returns a GrFragmentProcessor that implements this blend for the Ganesh GPU backend. | |
| * The GrFragmentProcessor expects premultiplied inputs and returns a premultiplied output. | |
| */ | |
| std::unique_ptr<GrFragmentProcessor> Make(const SkBlenderBase*, | |
| std::unique_ptr<GrFragmentProcessor> srcFP, | |
| std::unique_ptr<GrFragmentProcessor> dstFP, | |
| const GrFPArgs& fpArgs); | |
| /** | |
| * Returns a GrFragmentProcessor that implements the color filter in GPU shader code. | |
| * | |
| * The fragment processor receives a input FP that generates a premultiplied input color, and | |
| * produces a premultiplied output color. | |
| * | |
| * A GrFPFailure indicates that the color filter isn't implemented for the GPU backend. | |
| */ | |
| GrFPResult Make(skgpu::ganesh::SurfaceDrawContext*, | |
| 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*); | |
| /** | |
| * Call on the root SkShader to produce a GrFragmentProcessor. | |
| * | |
| * The returned GrFragmentProcessor expects an unpremultiplied input color and produces a | |
| * premultiplied output. | |
| */ | |
| std::unique_ptr<GrFragmentProcessor> Make(const SkShader*, const GrFPArgs&, const SkMatrix& ctm); | |
| std::unique_ptr<GrFragmentProcessor> Make(const SkShader*, | |
| const GrFPArgs&, | |
| const SkShaders::MatrixRec&); | |
| /** | |
| * Returns a GrFragmentProcessor for the passed-in runtime effect child. The processor will be | |
| * created with generic/null inputs, since the runtime effect is responsible for filling in the | |
| * arguments to the function. | |
| */ | |
| GrFPResult MakeChildFP(const SkRuntimeEffect::ChildPtr& child, | |
| const GrFPArgs& childArgs); | |
| } // namespace GrFragmentProcessors | |
| #endif |