Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(152)

Side by Side Diff: src/effects/gradients/SkLinearGradient.h

Issue 1436663003: Implement multi-color-stops in linear gradients using Sk4f (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: fix win warnings Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright 2012 Google Inc. 2 * Copyright 2012 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #ifndef SkLinearGradient_DEFINED 8 #ifndef SkLinearGradient_DEFINED
9 #define SkLinearGradient_DEFINED 9 #define SkLinearGradient_DEFINED
10 10
11 #include "SkGradientShaderPriv.h" 11 #include "SkGradientShaderPriv.h"
12 #include "SkNx.h"
13
14 struct Sk4fStorage {
15 float fArray[4];
16
17 operator Sk4f() const {
18 return Sk4f::Load(fArray);
19 }
20
21 Sk4fStorage& operator=(const Sk4f& src) {
22 src.store(fArray);
23 return *this;
24 }
25 };
12 26
13 class SkLinearGradient : public SkGradientShaderBase { 27 class SkLinearGradient : public SkGradientShaderBase {
14 public: 28 public:
15 SkLinearGradient(const SkPoint pts[2], const Descriptor&); 29 SkLinearGradient(const SkPoint pts[2], const Descriptor&);
16 30
17 size_t contextSize() const override; 31 size_t contextSize() const override;
18 32
19 class LinearGradientContext : public SkGradientShaderBase::GradientShaderBas eContext { 33 class LinearGradientContext : public SkGradientShaderBase::GradientShaderBas eContext {
20 public: 34 public:
21 LinearGradientContext(const SkLinearGradient&, const ContextRec&); 35 LinearGradientContext(const SkLinearGradient&, const ContextRec&);
22 ~LinearGradientContext() {}
23 36
24 void shadeSpan(int x, int y, SkPMColor dstC[], int count) override; 37 void shadeSpan(int x, int y, SkPMColor dstC[], int count) override;
25 void shadeSpan16(int x, int y, uint16_t dstC[], int count) override; 38 void shadeSpan16(int x, int y, uint16_t dstC[], int count) override;
26 39
40 struct Rec {
41 Sk4fStorage fColor;
42 float fPos;
43 float fPosScale;
44 };
27 private: 45 private:
46 SkTDArray<Rec> fRecs;
47 bool fApplyAlphaAfterInterp;
48
49 void shade4_clamp(int x, int y, SkPMColor dstC[], int count);
50 template <bool, bool> void shade4_dx_clamp(SkPMColor dstC[], int count, float fx, float dx,
51 float invDx, const float dith er[2]);
52
28 typedef SkGradientShaderBase::GradientShaderBaseContext INHERITED; 53 typedef SkGradientShaderBase::GradientShaderBaseContext INHERITED;
29 }; 54 };
30 55
31 GradientType asAGradient(GradientInfo* info) const override; 56 GradientType asAGradient(GradientInfo* info) const override;
32 #if SK_SUPPORT_GPU 57 #if SK_SUPPORT_GPU
33 const GrFragmentProcessor* asFragmentProcessor(GrContext*, 58 const GrFragmentProcessor* asFragmentProcessor(GrContext*,
34 const SkMatrix& viewM, 59 const SkMatrix& viewM,
35 const SkMatrix*, 60 const SkMatrix*,
36 SkFilterQuality) const overri de; 61 SkFilterQuality) const overri de;
37 #endif 62 #endif
38 63
39 SK_TO_STRING_OVERRIDE() 64 SK_TO_STRING_OVERRIDE()
40 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLinearGradient) 65 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLinearGradient)
41 66
42 protected: 67 protected:
43 SkLinearGradient(SkReadBuffer& buffer); 68 SkLinearGradient(SkReadBuffer& buffer);
44 void flatten(SkWriteBuffer& buffer) const override; 69 void flatten(SkWriteBuffer& buffer) const override;
45 Context* onCreateContext(const ContextRec&, void* storage) const override; 70 Context* onCreateContext(const ContextRec&, void* storage) const override;
46 71
47 private: 72 private:
48 friend class SkGradientShader; 73 friend class SkGradientShader;
49 typedef SkGradientShaderBase INHERITED; 74 typedef SkGradientShaderBase INHERITED;
50 const SkPoint fStart; 75 const SkPoint fStart;
51 const SkPoint fEnd; 76 const SkPoint fEnd;
52 }; 77 };
53 78
54 #endif 79 #endif
OLDNEW
« no previous file with comments | « src/effects/gradients/SkGradientShaderPriv.h ('k') | src/effects/gradients/SkLinearGradient.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698