1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2018 Google Inc. 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 GrGradientShader_DEFINE 9*c8dee2aaSAndroid Build Coastguard Worker #define GrGradientShader_DEFINE 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkColor.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkColorSpace.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkScalar.h" 15*c8dee2aaSAndroid Build Coastguard Worker #include "src/shaders/gradients/SkLinearGradient.h" 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Worker #include <memory> 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker class GrFragmentProcessor; 20*c8dee2aaSAndroid Build Coastguard Worker class SkGradientBaseShader; 21*c8dee2aaSAndroid Build Coastguard Worker class SkMatrix; 22*c8dee2aaSAndroid Build Coastguard Worker class SkRandom; 23*c8dee2aaSAndroid Build Coastguard Worker enum class SkTileMode; 24*c8dee2aaSAndroid Build Coastguard Worker struct GrFPArgs; 25*c8dee2aaSAndroid Build Coastguard Worker 26*c8dee2aaSAndroid Build Coastguard Worker namespace SkShaders { 27*c8dee2aaSAndroid Build Coastguard Worker class MatrixRec; 28*c8dee2aaSAndroid Build Coastguard Worker } 29*c8dee2aaSAndroid Build Coastguard Worker 30*c8dee2aaSAndroid Build Coastguard Worker namespace GrGradientShader { 31*c8dee2aaSAndroid Build Coastguard Worker std::unique_ptr<GrFragmentProcessor> MakeGradientFP(const SkGradientBaseShader& shader, 32*c8dee2aaSAndroid Build Coastguard Worker const GrFPArgs& args, 33*c8dee2aaSAndroid Build Coastguard Worker const SkShaders::MatrixRec&, 34*c8dee2aaSAndroid Build Coastguard Worker std::unique_ptr<GrFragmentProcessor> layout, 35*c8dee2aaSAndroid Build Coastguard Worker const SkMatrix* overrideMatrix = nullptr); 36*c8dee2aaSAndroid Build Coastguard Worker 37*c8dee2aaSAndroid Build Coastguard Worker std::unique_ptr<GrFragmentProcessor> MakeLinear(const SkLinearGradient& shader, 38*c8dee2aaSAndroid Build Coastguard Worker const GrFPArgs& args, 39*c8dee2aaSAndroid Build Coastguard Worker const SkShaders::MatrixRec&); 40*c8dee2aaSAndroid Build Coastguard Worker 41*c8dee2aaSAndroid Build Coastguard Worker #if defined(GPU_TEST_UTILS) 42*c8dee2aaSAndroid Build Coastguard Worker /** Helper struct that stores (and populates) parameters to construct a random gradient. 43*c8dee2aaSAndroid Build Coastguard Worker If fUseColors4f is true, then the SkColor4f factory should be called, with fColors4f and 44*c8dee2aaSAndroid Build Coastguard Worker fColorSpace. Otherwise, the SkColor factory should be called, with fColors. fColorCount 45*c8dee2aaSAndroid Build Coastguard Worker will be the number of color stops in either case, and fColors and fStops can be passed to 46*c8dee2aaSAndroid Build Coastguard Worker the gradient factory. (The constructor may decide not to use stops, in which case fStops 47*c8dee2aaSAndroid Build Coastguard Worker will be nullptr). */ 48*c8dee2aaSAndroid Build Coastguard Worker struct RandomParams { 49*c8dee2aaSAndroid Build Coastguard Worker inline static constexpr int kMaxRandomGradientColors = 5; 50*c8dee2aaSAndroid Build Coastguard Worker 51*c8dee2aaSAndroid Build Coastguard Worker // Should be of similar magnitude to the draw area of the tests so that the gradient 52*c8dee2aaSAndroid Build Coastguard Worker // sampling is done at an appropriate scale. 53*c8dee2aaSAndroid Build Coastguard Worker inline static constexpr SkScalar kGradientScale = 256.0f; 54*c8dee2aaSAndroid Build Coastguard Worker 55*c8dee2aaSAndroid Build Coastguard Worker RandomParams(SkRandom* r); 56*c8dee2aaSAndroid Build Coastguard Worker 57*c8dee2aaSAndroid Build Coastguard Worker bool fUseColors4f; 58*c8dee2aaSAndroid Build Coastguard Worker SkColor fColors[kMaxRandomGradientColors]; 59*c8dee2aaSAndroid Build Coastguard Worker SkColor4f fColors4f[kMaxRandomGradientColors]; 60*c8dee2aaSAndroid Build Coastguard Worker sk_sp<SkColorSpace> fColorSpace; 61*c8dee2aaSAndroid Build Coastguard Worker SkScalar fStopStorage[kMaxRandomGradientColors]; 62*c8dee2aaSAndroid Build Coastguard Worker SkTileMode fTileMode; 63*c8dee2aaSAndroid Build Coastguard Worker int fColorCount; 64*c8dee2aaSAndroid Build Coastguard Worker SkScalar* fStops; 65*c8dee2aaSAndroid Build Coastguard Worker }; 66*c8dee2aaSAndroid Build Coastguard Worker #endif 67*c8dee2aaSAndroid Build Coastguard Worker 68*c8dee2aaSAndroid Build Coastguard Worker } // namespace GrGradientShader 69*c8dee2aaSAndroid Build Coastguard Worker 70*c8dee2aaSAndroid Build Coastguard Worker #endif // GrGradientShader_DEFINE 71