xref: /aosp_15_r20/external/skia/src/gpu/ganesh/effects/GrMatrixEffect.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker  * Copyright 2020 Google LLC
3*c8dee2aaSAndroid Build Coastguard Worker  *
4*c8dee2aaSAndroid Build Coastguard Worker  * Use of this source code is governed by a BSD-style license that can be
5*c8dee2aaSAndroid Build Coastguard Worker  * found in the LICENSE file.
6*c8dee2aaSAndroid Build Coastguard Worker  */
7*c8dee2aaSAndroid Build Coastguard Worker 
8*c8dee2aaSAndroid Build Coastguard Worker #ifndef GrMatrixEffect_DEFINED
9*c8dee2aaSAndroid Build Coastguard Worker #define GrMatrixEffect_DEFINED
10*c8dee2aaSAndroid Build Coastguard Worker 
11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkMatrix.h"
12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkTypes.h"
13*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/SkColorData.h"
14*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/SkSLSampleUsage.h"
15*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrFragmentProcessor.h"
16*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrProcessorUnitTest.h"
17*c8dee2aaSAndroid Build Coastguard Worker 
18*c8dee2aaSAndroid Build Coastguard Worker #include <memory>
19*c8dee2aaSAndroid Build Coastguard Worker #include <utility>
20*c8dee2aaSAndroid Build Coastguard Worker 
21*c8dee2aaSAndroid Build Coastguard Worker namespace skgpu { class KeyBuilder; }
22*c8dee2aaSAndroid Build Coastguard Worker struct GrShaderCaps;
23*c8dee2aaSAndroid Build Coastguard Worker 
24*c8dee2aaSAndroid Build Coastguard Worker class GrMatrixEffect : public GrFragmentProcessor {
25*c8dee2aaSAndroid Build Coastguard Worker public:
26*c8dee2aaSAndroid Build Coastguard Worker     static std::unique_ptr<GrFragmentProcessor> Make(const SkMatrix& matrix,
27*c8dee2aaSAndroid Build Coastguard Worker                                                      std::unique_ptr<GrFragmentProcessor> child);
28*c8dee2aaSAndroid Build Coastguard Worker 
29*c8dee2aaSAndroid Build Coastguard Worker     std::unique_ptr<GrFragmentProcessor> clone() const override;
name()30*c8dee2aaSAndroid Build Coastguard Worker     const char* name() const override { return "MatrixEffect"; }
31*c8dee2aaSAndroid Build Coastguard Worker 
32*c8dee2aaSAndroid Build Coastguard Worker private:
33*c8dee2aaSAndroid Build Coastguard Worker     GrMatrixEffect(const GrMatrixEffect& src);
34*c8dee2aaSAndroid Build Coastguard Worker 
GrMatrixEffect(SkMatrix matrix,std::unique_ptr<GrFragmentProcessor> child)35*c8dee2aaSAndroid Build Coastguard Worker     GrMatrixEffect(SkMatrix matrix, std::unique_ptr<GrFragmentProcessor> child)
36*c8dee2aaSAndroid Build Coastguard Worker             : INHERITED(kGrMatrixEffect_ClassID, ProcessorOptimizationFlags(child.get()))
37*c8dee2aaSAndroid Build Coastguard Worker             , fMatrix(matrix) {
38*c8dee2aaSAndroid Build Coastguard Worker         SkASSERT(child);
39*c8dee2aaSAndroid Build Coastguard Worker         this->registerChild(std::move(child),
40*c8dee2aaSAndroid Build Coastguard Worker                             SkSL::SampleUsage::UniformMatrix(matrix.hasPerspective()));
41*c8dee2aaSAndroid Build Coastguard Worker     }
42*c8dee2aaSAndroid Build Coastguard Worker 
43*c8dee2aaSAndroid Build Coastguard Worker     std::unique_ptr<ProgramImpl> onMakeProgramImpl() const override;
44*c8dee2aaSAndroid Build Coastguard Worker     void onAddToKey(const GrShaderCaps&, skgpu::KeyBuilder*) const override;
45*c8dee2aaSAndroid Build Coastguard Worker     bool onIsEqual(const GrFragmentProcessor&) const override;
constantOutputForConstantInput(const SkPMColor4f & inputColor)46*c8dee2aaSAndroid Build Coastguard Worker     SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& inputColor) const override {
47*c8dee2aaSAndroid Build Coastguard Worker         return ConstantOutputForConstantInput(this->childProcessor(0), inputColor);
48*c8dee2aaSAndroid Build Coastguard Worker     }
49*c8dee2aaSAndroid Build Coastguard Worker 
50*c8dee2aaSAndroid Build Coastguard Worker     SkMatrix fMatrix;
51*c8dee2aaSAndroid Build Coastguard Worker 
52*c8dee2aaSAndroid Build Coastguard Worker     GR_DECLARE_FRAGMENT_PROCESSOR_TEST
53*c8dee2aaSAndroid Build Coastguard Worker     using INHERITED = GrFragmentProcessor;
54*c8dee2aaSAndroid Build Coastguard Worker };
55*c8dee2aaSAndroid Build Coastguard Worker #endif
56