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

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

Issue 241173005: Get gradient information for gpu effect directly from SkGradientShader instead of calling asAGradie… (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Merge fixes Created 6 years, 8 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/effects/gradients/SkGradientShader.cpp ('k') | no next file » | 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 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 SkGradientShaderPriv_DEFINED 8 #ifndef SkGradientShaderPriv_DEFINED
9 #define SkGradientShaderPriv_DEFINED 9 #define SkGradientShaderPriv_DEFINED
10 10
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 kCache32Count = (1 << kCache32Bits), 121 kCache32Count = (1 << kCache32Bits),
122 kCache32Shift = 16 - kCache32Bits, 122 kCache32Shift = 16 - kCache32Bits,
123 kSqrt32Shift = 8 - kCache32Bits, 123 kSqrt32Shift = 8 - kCache32Bits,
124 124
125 /// This value is used to *read* the dither cache; it may be 0 125 /// This value is used to *read* the dither cache; it may be 0
126 /// if dithering is disabled. 126 /// if dithering is disabled.
127 kDitherStride32 = kCache32Count, 127 kDitherStride32 = kCache32Count,
128 kDitherStride16 = kCache16Count, 128 kDitherStride16 = kCache16Count,
129 }; 129 };
130 130
131 enum GpuColorType {
132 kTwo_GpuColorType,
133 kThree_GpuColorType, // Symmetric three color
134 kTexture_GpuColorType
135 };
136
137 // Determines and returns the gradient is a two color gradient, symmetric th ree color gradient
138 // or other (texture gradient). If it is two or symmetric three color, the c olors array will
139 // also be filled with the gradient colors
140 GpuColorType getGpuColorType(SkColor colors[3]) const;
141
142 uint32_t getFlags() const { return fGradFlags; }
Dominik Grewe 2014/04/22 10:19:33 I don't think getFlags is a good name if we alread
bsalomon 2014/04/22 13:14:51 Good point... I didn't notice the other getFlags()
131 143
132 protected: 144 protected:
133 SkGradientShaderBase(SkReadBuffer& ); 145 SkGradientShaderBase(SkReadBuffer& );
134 virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE; 146 virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
135 SK_TO_STRING_OVERRIDE() 147 SK_TO_STRING_OVERRIDE()
136 148
137 SkUnitMapper* fMapper; 149 SkUnitMapper* fMapper;
138 SkMatrix fPtsToUnit; // set by subclass 150 SkMatrix fPtsToUnit; // set by subclass
139 SkMatrix fDstToIndex; 151 SkMatrix fDstToIndex;
140 SkMatrix::MapXYProc fDstToIndexProc; 152 SkMatrix::MapXYProc fDstToIndexProc;
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 const SkMatrix& matrix, 256 const SkMatrix& matrix,
245 SkShader::TileMode tileMode); 257 SkShader::TileMode tileMode);
246 258
247 virtual ~GrGradientEffect(); 259 virtual ~GrGradientEffect();
248 260
249 bool useAtlas() const { return SkToBool(-1 != fRow); } 261 bool useAtlas() const { return SkToBool(-1 != fRow); }
250 SkScalar getYCoord() const { return fYCoord; }; 262 SkScalar getYCoord() const { return fYCoord; };
251 263
252 virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags ) const SK_OVERRIDE; 264 virtual void getConstantColorComponents(GrColor* color, uint32_t* validFlags ) const SK_OVERRIDE;
253 265
254 enum ColorType { 266 SkGradientShaderBase::GpuColorType getColorType() const { return fColorType; }
255 kTwo_ColorType,
256 kThree_ColorType,
257 kTexture_ColorType
258 };
259
260 ColorType getColorType() const { return fColorType; }
261 267
262 enum PremulType { 268 enum PremulType {
263 kBeforeInterp_PremulType, 269 kBeforeInterp_PremulType,
264 kAfterInterp_PremulType, 270 kAfterInterp_PremulType,
265 }; 271 };
266 272
267 PremulType getPremulType() const { return fPremulType; } 273 PremulType getPremulType() const { return fPremulType; }
268 274
269 const SkColor* getColors(int pos) const { 275 const SkColor* getColors(int pos) const {
270 SkASSERT(fColorType != kTexture_ColorType); 276 SkASSERT(fColorType != SkGradientShaderBase::kTexture_GpuColorType);
271 SkASSERT((pos-1) <= fColorType); 277 SkASSERT((pos-1) <= fColorType);
272 return &fColors[pos]; 278 return &fColors[pos];
273 } 279 }
274 280
275 protected: 281 protected:
276 282
277 /** Populates a pair of arrays with colors and stop info to construct a rand om gradient. 283 /** Populates a pair of arrays with colors and stop info to construct a rand om gradient.
278 The function decides whether stop values should be used or not. The retu rn value indicates 284 The function decides whether stop values should be used or not. The retu rn value indicates
279 the number of colors, which will be capped by kMaxRandomGradientColors. colors should be 285 the number of colors, which will be capped by kMaxRandomGradientColors. colors should be
280 sized to be at least kMaxRandomGradientColors. stops is a pointer to an array of at least 286 sized to be at least kMaxRandomGradientColors. stops is a pointer to an array of at least
281 size kMaxRandomGradientColors. It may be updated to NULL, indicating tha t NULL should be 287 size kMaxRandomGradientColors. It may be updated to NULL, indicating tha t NULL should be
282 passed to the gradient factory rather than the array. 288 passed to the gradient factory rather than the array.
283 */ 289 */
284 static const int kMaxRandomGradientColors = 4; 290 static const int kMaxRandomGradientColors = 4;
285 static int RandomGradientParams(SkRandom* r, 291 static int RandomGradientParams(SkRandom* r,
286 SkColor colors[kMaxRandomGradientColors], 292 SkColor colors[kMaxRandomGradientColors],
287 SkScalar** stops, 293 SkScalar** stops,
288 SkShader::TileMode* tm); 294 SkShader::TileMode* tm);
289 295
290 virtual bool onIsEqual(const GrEffect& effect) const SK_OVERRIDE; 296 virtual bool onIsEqual(const GrEffect& effect) const SK_OVERRIDE;
291 297
292 const GrCoordTransform& getCoordTransform() const { return fCoordTransform; } 298 const GrCoordTransform& getCoordTransform() const { return fCoordTransform; }
293 299
294 private: 300 private:
295 static const GrCoordSet kCoordSet = kLocal_GrCoordSet; 301 static const GrCoordSet kCoordSet = kLocal_GrCoordSet;
296 302
297 enum {
298 kMaxAnalyticColors = 3 // if more colors use texture
299 };
300
301 GrCoordTransform fCoordTransform; 303 GrCoordTransform fCoordTransform;
302 GrTextureAccess fTextureAccess; 304 GrTextureAccess fTextureAccess;
303 SkScalar fYCoord; 305 SkScalar fYCoord;
304 GrTextureStripAtlas* fAtlas; 306 GrTextureStripAtlas* fAtlas;
305 int fRow; 307 int fRow;
306 bool fIsOpaque; 308 bool fIsOpaque;
307 ColorType fColorType; 309 SkGradientShaderBase::GpuColorType fColorType;
308 SkColor fColors[kMaxAnalyticColors]; 310 SkColor fColors[3]; // More than 3 colors we use texture
309 PremulType fPremulType; // This only changes behavior for two and three colo r special cases. 311 PremulType fPremulType; // This only changes behavior for two and three colo r special cases.
310 // It is already baked into to the table for texture gradients. 312 // It is already baked into to the table for texture gradients.
311 typedef GrEffect INHERITED; 313 typedef GrEffect INHERITED;
312 314
313 }; 315 };
314 316
315 /////////////////////////////////////////////////////////////////////////////// 317 ///////////////////////////////////////////////////////////////////////////////
316 318
317 // Base class for GL gradient effects 319 // Base class for GL gradient effects
318 class GrGLGradientEffect : public GrGLEffect { 320 class GrGLGradientEffect : public GrGLEffect {
(...skipping 12 matching lines...) Expand all
331 kTwoColorKey = 2 << kPremulTypeKeyBitCnt, 333 kTwoColorKey = 2 << kPremulTypeKeyBitCnt,
332 kThreeColorKey = 3 << kPremulTypeKeyBitCnt, 334 kThreeColorKey = 3 << kPremulTypeKeyBitCnt,
333 kColorKeyMask = kTwoColorKey | kThreeColorKey, 335 kColorKeyMask = kTwoColorKey | kThreeColorKey,
334 kColorKeyBitCnt = 2, 336 kColorKeyBitCnt = 2,
335 337
336 // Subclasses must shift any key bits they produce up by this amount 338 // Subclasses must shift any key bits they produce up by this amount
337 // and combine with the result of GenBaseGradientKey. 339 // and combine with the result of GenBaseGradientKey.
338 kBaseKeyBitCnt = (kPremulTypeKeyBitCnt + kColorKeyBitCnt) 340 kBaseKeyBitCnt = (kPremulTypeKeyBitCnt + kColorKeyBitCnt)
339 }; 341 };
340 342
341 static GrGradientEffect::ColorType ColorTypeFromKey(EffectKey key){ 343 static SkGradientShaderBase::GpuColorType ColorTypeFromKey(EffectKey key){
342 if (kTwoColorKey == (key & kColorKeyMask)) { 344 if (kTwoColorKey == (key & kColorKeyMask)) {
343 return GrGradientEffect::kTwo_ColorType; 345 return SkGradientShaderBase::kTwo_GpuColorType;
344 } else if (kThreeColorKey == (key & kColorKeyMask)) { 346 } else if (kThreeColorKey == (key & kColorKeyMask)) {
345 return GrGradientEffect::kThree_ColorType; 347 return SkGradientShaderBase::kThree_GpuColorType;
346 } else {return GrGradientEffect::kTexture_ColorType;} 348 } else {return SkGradientShaderBase::kTexture_GpuColorType;}
347 } 349 }
348 350
349 static GrGradientEffect::PremulType PremulTypeFromKey(EffectKey key){ 351 static GrGradientEffect::PremulType PremulTypeFromKey(EffectKey key){
350 if (kPremulBeforeInterpKey == (key & kPremulTypeMask)) { 352 if (kPremulBeforeInterpKey == (key & kPremulTypeMask)) {
351 return GrGradientEffect::kBeforeInterp_PremulType; 353 return GrGradientEffect::kBeforeInterp_PremulType;
352 } else { 354 } else {
353 return GrGradientEffect::kAfterInterp_PremulType; 355 return GrGradientEffect::kAfterInterp_PremulType;
354 } 356 }
355 } 357 }
356 358
(...skipping 24 matching lines...) Expand all
381 GrGLUniformManager::UniformHandle fColorStartUni; 383 GrGLUniformManager::UniformHandle fColorStartUni;
382 GrGLUniformManager::UniformHandle fColorMidUni; 384 GrGLUniformManager::UniformHandle fColorMidUni;
383 GrGLUniformManager::UniformHandle fColorEndUni; 385 GrGLUniformManager::UniformHandle fColorEndUni;
384 386
385 typedef GrGLEffect INHERITED; 387 typedef GrGLEffect INHERITED;
386 }; 388 };
387 389
388 #endif 390 #endif
389 391
390 #endif 392 #endif
OLDNEW
« no previous file with comments | « src/effects/gradients/SkGradientShader.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698