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

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

Issue 207683004: Extract most of the mutable state of SkShader into a separate Context object. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: scroggo's comments Created 6 years, 9 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
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 #include "SkLinearGradient.h" 8 #include "SkLinearGradient.h"
9 9
10 static inline int repeat_bits(int x, const int bits) { 10 static inline int repeat_bits(int x, const int bits) {
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 , fStart(buffer.readPoint()) 64 , fStart(buffer.readPoint())
65 , fEnd(buffer.readPoint()) { 65 , fEnd(buffer.readPoint()) {
66 } 66 }
67 67
68 void SkLinearGradient::flatten(SkWriteBuffer& buffer) const { 68 void SkLinearGradient::flatten(SkWriteBuffer& buffer) const {
69 this->INHERITED::flatten(buffer); 69 this->INHERITED::flatten(buffer);
70 buffer.writePoint(fStart); 70 buffer.writePoint(fStart);
71 buffer.writePoint(fEnd); 71 buffer.writePoint(fEnd);
72 } 72 }
73 73
74 #if 0
74 bool SkLinearGradient::setContext(const SkBitmap& device, const SkPaint& paint, 75 bool SkLinearGradient::setContext(const SkBitmap& device, const SkPaint& paint,
75 const SkMatrix& matrix) { 76 const SkMatrix& matrix) {
76 if (!this->INHERITED::setContext(device, paint, matrix)) { 77 if (!this->INHERITED::setContext(device, paint, matrix)) {
77 return false; 78 return false;
78 } 79 }
79 80
80 unsigned mask = SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask; 81 unsigned mask = SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask;
81 if ((fDstToIndex.getType() & ~mask) == 0) { 82 if ((fDstToIndex.getType() & ~mask) == 0) {
82 // when we dither, we are (usually) not const-in-Y 83 // when we dither, we are (usually) not const-in-Y
83 if ((fFlags & SkShader::kHasSpan16_Flag) && !paint.isDither()) { 84 if ((fFlags & SkShader::kHasSpan16_Flag) && !paint.isDither()) {
84 // only claim this if we do have a 16bit mode (i.e. none of our 85 // only claim this if we do have a 16bit mode (i.e. none of our
85 // colors have alpha), and if we are not dithering (which obviously 86 // colors have alpha), and if we are not dithering (which obviously
86 // is not const in Y). 87 // is not const in Y).
87 fFlags |= SkShader::kConstInY16_Flag; 88 fFlags |= SkShader::kConstInY16_Flag;
88 } 89 }
89 } 90 }
90 return true; 91 return true;
91 } 92 }
93 #endif
92 94
93 #define NO_CHECK_ITER \ 95 #define NO_CHECK_ITER \
94 do { \ 96 do { \
95 unsigned fi = fx >> SkGradientShaderBase::kCache32Shift; \ 97 unsigned fi = fx >> SkGradientShaderBase::kCache32Shift; \
96 SkASSERT(fi <= 0xFF); \ 98 SkASSERT(fi <= 0xFF); \
97 fx += dx; \ 99 fx += dx; \
98 *dstC++ = cache[toggle + fi]; \ 100 *dstC++ = cache[toggle + fi]; \
99 toggle = next_dither_toggle(toggle); \ 101 toggle = next_dither_toggle(toggle); \
100 } while (0) 102 } while (0)
101 103
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 unsigned fi = repeat_8bits(fx >> 8); 191 unsigned fi = repeat_8bits(fx >> 8);
190 SkASSERT(fi <= 0xFF); 192 SkASSERT(fi <= 0xFF);
191 fx += dx; 193 fx += dx;
192 *dstC++ = cache[toggle + fi]; 194 *dstC++ = cache[toggle + fi];
193 toggle = next_dither_toggle(toggle); 195 toggle = next_dither_toggle(toggle);
194 } while (--count != 0); 196 } while (--count != 0);
195 } 197 }
196 198
197 } 199 }
198 200
201 #if 0
199 void SkLinearGradient::shadeSpan(int x, int y, SkPMColor* SK_RESTRICT dstC, 202 void SkLinearGradient::shadeSpan(int x, int y, SkPMColor* SK_RESTRICT dstC,
200 int count) { 203 int count) {
201 SkASSERT(count > 0); 204 SkASSERT(count > 0);
202 205
203 SkPoint srcPt; 206 SkPoint srcPt;
204 SkMatrix::MapXYProc dstProc = fDstToIndexProc; 207 SkMatrix::MapXYProc dstProc = fDstToIndexProc;
205 TileProc proc = fTileProc; 208 TileProc proc = fTileProc;
206 const SkPMColor* SK_RESTRICT cache = this->getCache32(); 209 const SkPMColor* SK_RESTRICT cache = this->getCache32();
207 int toggle = init_dither_toggle(x, y); 210 int toggle = init_dither_toggle(x, y);
208 211
(...skipping 28 matching lines...) Expand all
237 do { 240 do {
238 dstProc(fDstToIndex, dstX, dstY, &srcPt); 241 dstProc(fDstToIndex, dstX, dstY, &srcPt);
239 unsigned fi = proc(SkScalarToFixed(srcPt.fX)); 242 unsigned fi = proc(SkScalarToFixed(srcPt.fX));
240 SkASSERT(fi <= 0xFFFF); 243 SkASSERT(fi <= 0xFFFF);
241 *dstC++ = cache[toggle + (fi >> kCache32Shift)]; 244 *dstC++ = cache[toggle + (fi >> kCache32Shift)];
242 toggle = next_dither_toggle(toggle); 245 toggle = next_dither_toggle(toggle);
243 dstX += SK_Scalar1; 246 dstX += SK_Scalar1;
244 } while (--count != 0); 247 } while (--count != 0);
245 } 248 }
246 } 249 }
250 #endif
247 251
248 SkShader::BitmapType SkLinearGradient::asABitmap(SkBitmap* bitmap, 252 SkShader::BitmapType SkLinearGradient::asABitmap(SkBitmap* bitmap,
249 SkMatrix* matrix, 253 SkMatrix* matrix,
250 TileMode xy[]) const { 254 TileMode xy[]) const {
251 if (bitmap) { 255 if (bitmap) {
252 this->getGradientTableBitmap(bitmap); 256 this->getGradientTableBitmap(bitmap);
253 } 257 }
254 if (matrix) { 258 if (matrix) {
255 matrix->preConcat(fPtsToUnit); 259 matrix->preConcat(fPtsToUnit);
256 } 260 }
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
370 unsigned fi = repeat_bits(fx >> SkGradientShaderBase::kCache16Shift, 374 unsigned fi = repeat_bits(fx >> SkGradientShaderBase::kCache16Shift,
371 SkGradientShaderBase::kCache16Bits); 375 SkGradientShaderBase::kCache16Bits);
372 SkASSERT(fi < SkGradientShaderBase::kCache16Count); 376 SkASSERT(fi < SkGradientShaderBase::kCache16Count);
373 fx += dx; 377 fx += dx;
374 *dstC++ = cache[toggle + fi]; 378 *dstC++ = cache[toggle + fi];
375 toggle = next_dither_toggle16(toggle); 379 toggle = next_dither_toggle16(toggle);
376 } while (--count != 0); 380 } while (--count != 0);
377 } 381 }
378 } 382 }
379 383
384 #if 0
380 static bool fixed_nearly_zero(SkFixed x) { 385 static bool fixed_nearly_zero(SkFixed x) {
381 return SkAbs32(x) < (SK_Fixed1 >> 12); 386 return SkAbs32(x) < (SK_Fixed1 >> 12);
382 } 387 }
383 388
384 void SkLinearGradient::shadeSpan16(int x, int y, 389 void SkLinearGradient::shadeSpan16(int x, int y,
385 uint16_t* SK_RESTRICT dstC, int count) { 390 uint16_t* SK_RESTRICT dstC, int count) {
386 SkASSERT(count > 0); 391 SkASSERT(count > 0);
387 392
388 SkPoint srcPt; 393 SkPoint srcPt;
389 SkMatrix::MapXYProc dstProc = fDstToIndexProc; 394 SkMatrix::MapXYProc dstProc = fDstToIndexProc;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
425 SkASSERT(fi <= 0xFFFF); 430 SkASSERT(fi <= 0xFFFF);
426 431
427 int index = fi >> kCache16Shift; 432 int index = fi >> kCache16Shift;
428 *dstC++ = cache[toggle + index]; 433 *dstC++ = cache[toggle + index];
429 toggle = next_dither_toggle16(toggle); 434 toggle = next_dither_toggle16(toggle);
430 435
431 dstX += SK_Scalar1; 436 dstX += SK_Scalar1;
432 } while (--count != 0); 437 } while (--count != 0);
433 } 438 }
434 } 439 }
440 #endif
435 441
436 #if SK_SUPPORT_GPU 442 #if SK_SUPPORT_GPU
437 443
438 #include "GrTBackendEffectFactory.h" 444 #include "GrTBackendEffectFactory.h"
439 445
440 ///////////////////////////////////////////////////////////////////// 446 /////////////////////////////////////////////////////////////////////
441 447
442 class GrGLLinearGradient : public GrGLGradientEffect { 448 class GrGLLinearGradient : public GrGLGradientEffect {
443 public: 449 public:
444 450
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
561 str->append("SkLinearGradient ("); 567 str->append("SkLinearGradient (");
562 568
563 str->appendf("start: (%f, %f)", fStart.fX, fStart.fY); 569 str->appendf("start: (%f, %f)", fStart.fX, fStart.fY);
564 str->appendf(" end: (%f, %f) ", fEnd.fX, fEnd.fY); 570 str->appendf(" end: (%f, %f) ", fEnd.fX, fEnd.fY);
565 571
566 this->INHERITED::toString(str); 572 this->INHERITED::toString(str);
567 573
568 str->append(")"); 574 str->append(")");
569 } 575 }
570 #endif 576 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698