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

Side by Side Diff: src/core/SkColorSpace_Base.h

Issue 2084673002: Use a table-based implementation of SkDefaultXform (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: quickEquals() Created 4 years, 6 months 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
« no previous file with comments | « src/core/SkColorSpaceXform.cpp ('k') | src/opts/SkColorXform_opts.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2016 Google Inc. 2 * Copyright 2016 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 SkColorSpace_Base_DEFINED 8 #ifndef SkColorSpace_Base_DEFINED
9 #define SkColorSpace_Base_DEFINED 9 #define SkColorSpace_Base_DEFINED
10 10
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 , fTableSize(0) 74 , fTableSize(0)
75 , fTable(nullptr) 75 , fTable(nullptr)
76 , fG(0.0f) 76 , fG(0.0f)
77 , fA(0.0f) 77 , fA(0.0f)
78 , fB(0.0f) 78 , fB(0.0f)
79 , fC(0.0f) 79 , fC(0.0f)
80 , fD(0.0f) 80 , fD(0.0f)
81 , fE(0.0f) 81 , fE(0.0f)
82 , fF(0.0f) 82 , fF(0.0f)
83 {} 83 {}
84
85 bool quickEquals(const SkGammaCurve& that) const {
86 return (this->fNamed == that.fNamed) && (this->fValue == that.fValue) &&
87 (this->fTableSize == that.fTableSize) && (this->fTable == that.f Table) &&
88 (this->fG == that.fG) && (this->fA == that.fA) && (this->fB == t hat.fB) &&
89 (this->fC == that.fC) && (this->fD == that.fD) && (this->fE == t hat.fE) &&
90 (this->fF == that.fF);
91 }
84 }; 92 };
85 93
86 struct SkGammas : public SkRefCnt { 94 struct SkGammas : public SkRefCnt {
87 public: 95 public:
88 static SkColorSpace::GammaNamed Named(SkGammaCurve curves[3]) { 96 static SkColorSpace::GammaNamed Named(SkGammaCurve curves[3]) {
89 if (SkColorSpace::kLinear_GammaNamed == curves[0].fNamed && 97 if (SkColorSpace::kLinear_GammaNamed == curves[0].fNamed &&
90 SkColorSpace::kLinear_GammaNamed == curves[1].fNamed && 98 SkColorSpace::kLinear_GammaNamed == curves[1].fNamed &&
91 SkColorSpace::kLinear_GammaNamed == curves[2].fNamed) 99 SkColorSpace::kLinear_GammaNamed == curves[2].fNamed)
92 { 100 {
93 return SkColorSpace::kLinear_GammaNamed; 101 return SkColorSpace::kLinear_GammaNamed;
94 } 102 }
95 103
96 if (SkColorSpace::kSRGB_GammaNamed == curves[0].fNamed && 104 if (SkColorSpace::kSRGB_GammaNamed == curves[0].fNamed &&
97 SkColorSpace::kSRGB_GammaNamed == curves[1].fNamed && 105 SkColorSpace::kSRGB_GammaNamed == curves[1].fNamed &&
98 SkColorSpace::kSRGB_GammaNamed == curves[2].fNamed) 106 SkColorSpace::kSRGB_GammaNamed == curves[2].fNamed)
99 { 107 {
100 return SkColorSpace::kSRGB_GammaNamed; 108 return SkColorSpace::kSRGB_GammaNamed;
101 } 109 }
102 110
103 if (SkColorSpace::k2Dot2Curve_GammaNamed == curves[0].fNamed && 111 if (SkColorSpace::k2Dot2Curve_GammaNamed == curves[0].fNamed &&
104 SkColorSpace::k2Dot2Curve_GammaNamed == curves[1].fNamed && 112 SkColorSpace::k2Dot2Curve_GammaNamed == curves[1].fNamed &&
105 SkColorSpace::k2Dot2Curve_GammaNamed == curves[2].fNamed) 113 SkColorSpace::k2Dot2Curve_GammaNamed == curves[2].fNamed)
106 { 114 {
107 return SkColorSpace::k2Dot2Curve_GammaNamed; 115 return SkColorSpace::k2Dot2Curve_GammaNamed;
108 } 116 }
109 117
110 return SkColorSpace::kNonStandard_GammaNamed; 118 return SkColorSpace::kNonStandard_GammaNamed;
111 } 119 }
112 120
113 const SkGammaCurve& operator[](int i) { 121 const SkGammaCurve& operator[](int i) const {
114 SkASSERT(0 <= i && i < 3); 122 SkASSERT(0 <= i && i < 3);
115 return (&fRed)[i]; 123 return (&fRed)[i];
116 } 124 }
117 125
118 const SkGammaCurve fRed; 126 const SkGammaCurve fRed;
119 const SkGammaCurve fGreen; 127 const SkGammaCurve fGreen;
120 const SkGammaCurve fBlue; 128 const SkGammaCurve fBlue;
121 129
122 SkGammas(SkGammaCurve red, SkGammaCurve green, SkGammaCurve blue) 130 SkGammas(SkGammaCurve red, SkGammaCurve green, SkGammaCurve blue)
123 : fRed(std::move(red)) 131 : fRed(std::move(red))
(...skipping 17 matching lines...) Expand all
141 SkColorLookUpTable() { 149 SkColorLookUpTable() {
142 memset(this, 0, sizeof(struct SkColorLookUpTable)); 150 memset(this, 0, sizeof(struct SkColorLookUpTable));
143 } 151 }
144 }; 152 };
145 153
146 class SkColorSpace_Base : public SkColorSpace { 154 class SkColorSpace_Base : public SkColorSpace {
147 public: 155 public:
148 156
149 static sk_sp<SkColorSpace> NewRGB(float gammas[3], const SkMatrix44& toXYZD5 0); 157 static sk_sp<SkColorSpace> NewRGB(float gammas[3], const SkMatrix44& toXYZD5 0);
150 158
151 const sk_sp<SkGammas>& gammas() const { return fGammas; } 159 const SkGammas* gammas() const { return fGammas.get(); }
152 160
153 SkColorLookUpTable* colorLUT() const { return fColorLUT.get(); } 161 const SkColorLookUpTable* colorLUT() const { return fColorLUT.get(); }
154 162
155 /** 163 /**
156 * Writes this object as an ICC profile. 164 * Writes this object as an ICC profile.
157 */ 165 */
158 sk_sp<SkData> writeToICC() const; 166 sk_sp<SkData> writeToICC() const;
159 167
160 private: 168 private:
161 169
162 static sk_sp<SkColorSpace> NewRGB(GammaNamed gammaNamed, const SkMatrix44& t oXYZD50, 170 static sk_sp<SkColorSpace> NewRGB(GammaNamed gammaNamed, const SkMatrix44& t oXYZD50,
163 sk_sp<SkData> profileData); 171 sk_sp<SkData> profileData);
164 172
165 SkColorSpace_Base(GammaNamed gammaNamed, const SkMatrix44& toXYZ, Named name d, 173 SkColorSpace_Base(GammaNamed gammaNamed, const SkMatrix44& toXYZ, Named name d,
166 sk_sp<SkData> profileData); 174 sk_sp<SkData> profileData);
167 175
168 SkColorSpace_Base(SkColorLookUpTable* colorLUT, sk_sp<SkGammas> gammas, cons t SkMatrix44& toXYZ, 176 SkColorSpace_Base(SkColorLookUpTable* colorLUT, sk_sp<SkGammas> gammas, cons t SkMatrix44& toXYZ,
169 sk_sp<SkData> profileData); 177 sk_sp<SkData> profileData);
170 178
171 SkAutoTDelete<SkColorLookUpTable> fColorLUT; 179 SkAutoTDelete<SkColorLookUpTable> fColorLUT;
172 sk_sp<SkGammas> fGammas; 180 sk_sp<SkGammas> fGammas;
173 sk_sp<SkData> fProfileData; 181 sk_sp<SkData> fProfileData;
174 182
175 friend class SkColorSpace; 183 friend class SkColorSpace;
184 friend class ColorSpaceXformTest;
176 typedef SkColorSpace INHERITED; 185 typedef SkColorSpace INHERITED;
177 }; 186 };
178 187
179 static inline SkColorSpace_Base* as_CSB(SkColorSpace* colorSpace) { 188 static inline SkColorSpace_Base* as_CSB(SkColorSpace* colorSpace) {
180 return static_cast<SkColorSpace_Base*>(colorSpace); 189 return static_cast<SkColorSpace_Base*>(colorSpace);
181 } 190 }
182 191
183 static inline const SkColorSpace_Base* as_CSB(const SkColorSpace* colorSpace) { 192 static inline const SkColorSpace_Base* as_CSB(const SkColorSpace* colorSpace) {
184 return static_cast<const SkColorSpace_Base*>(colorSpace); 193 return static_cast<const SkColorSpace_Base*>(colorSpace);
185 } 194 }
186 195
187 static inline SkColorSpace_Base* as_CSB(const sk_sp<SkColorSpace>& colorSpace) { 196 static inline SkColorSpace_Base* as_CSB(const sk_sp<SkColorSpace>& colorSpace) {
188 return static_cast<SkColorSpace_Base*>(colorSpace.get()); 197 return static_cast<SkColorSpace_Base*>(colorSpace.get());
189 } 198 }
190 199
191 #endif 200 #endif
OLDNEW
« no previous file with comments | « src/core/SkColorSpaceXform.cpp ('k') | src/opts/SkColorXform_opts.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698