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

Side by Side Diff: src/core/SkBitmapProcState.cpp

Issue 1014533004: SkPaint::FilterLevel -> SkFilterQuality (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 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
« no previous file with comments | « src/core/SkBitmapProcShader.cpp ('k') | src/core/SkBitmapProcState_matrixProcs.cpp » ('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 2011 Google Inc. 2 * Copyright 2011 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 "SkBitmapCache.h" 8 #include "SkBitmapCache.h"
9 #include "SkBitmapProcState.h" 9 #include "SkBitmapProcState.h"
10 #include "SkColorPriv.h" 10 #include "SkColorPriv.h"
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 } 136 }
137 scale->set(sx, sy); 137 scale->set(sx, sy);
138 return true; 138 return true;
139 } 139 }
140 140
141 /* 141 /*
142 * High quality is implemented by performing up-right scale-only filtering and then 142 * High quality is implemented by performing up-right scale-only filtering and then
143 * using bilerp for any remaining transformations. 143 * using bilerp for any remaining transformations.
144 */ 144 */
145 void SkBitmapProcState::processHQRequest() { 145 void SkBitmapProcState::processHQRequest() {
146 SkASSERT(SkPaint::kHigh_FilterLevel == fFilterLevel); 146 SkASSERT(kHigh_SkFilterQuality == fFilterLevel);
147 147
148 // Our default return state is to downgrade the request to Medium, w/ or w/o setting fBitmap 148 // Our default return state is to downgrade the request to Medium, w/ or w/o setting fBitmap
149 // to a valid bitmap. If we succeed, we will set this to Low instead. 149 // to a valid bitmap. If we succeed, we will set this to Low instead.
150 fFilterLevel = SkPaint::kMedium_FilterLevel; 150 fFilterLevel = kMedium_SkFilterQuality;
151 151
152 if (kN32_SkColorType != fOrigBitmap.colorType() || !cache_size_okay(fOrigBit map, fInvMatrix) || 152 if (kN32_SkColorType != fOrigBitmap.colorType() || !cache_size_okay(fOrigBit map, fInvMatrix) ||
153 fInvMatrix.hasPerspective()) 153 fInvMatrix.hasPerspective())
154 { 154 {
155 return; // can't handle the reqeust 155 return; // can't handle the reqeust
156 } 156 }
157 157
158 SkScalar invScaleX = fInvMatrix.getScaleX(); 158 SkScalar invScaleX = fInvMatrix.getScaleX();
159 SkScalar invScaleY = fInvMatrix.getScaleY(); 159 SkScalar invScaleY = fInvMatrix.getScaleY();
160 if (fInvMatrix.getType() & SkMatrix::kAffine_Mask) { 160 if (fInvMatrix.getType() & SkMatrix::kAffine_Mask) {
(...skipping 26 matching lines...) Expand all
187 SkASSERT(fScaledBitmap.getPixels()); 187 SkASSERT(fScaledBitmap.getPixels());
188 fScaledBitmap.setImmutable(); 188 fScaledBitmap.setImmutable();
189 SkBitmapCache::Add(fOrigBitmap, roundedDestWidth, roundedDestHeight, fSc aledBitmap); 189 SkBitmapCache::Add(fOrigBitmap, roundedDestWidth, roundedDestHeight, fSc aledBitmap);
190 } 190 }
191 191
192 SkASSERT(fScaledBitmap.getPixels()); 192 SkASSERT(fScaledBitmap.getPixels());
193 fBitmap = &fScaledBitmap; 193 fBitmap = &fScaledBitmap;
194 194
195 fInvMatrix.postScale(roundedDestWidth / fOrigBitmap.width(), 195 fInvMatrix.postScale(roundedDestWidth / fOrigBitmap.width(),
196 roundedDestHeight / fOrigBitmap.height()); 196 roundedDestHeight / fOrigBitmap.height());
197 fFilterLevel = SkPaint::kLow_FilterLevel; 197 fFilterLevel = kLow_SkFilterQuality;
198 } 198 }
199 199
200 /* 200 /*
201 * Modulo internal errors, this should always succeed *if* the matrix is downsc aling 201 * Modulo internal errors, this should always succeed *if* the matrix is downsc aling
202 * (in this case, we have the inverse, so it succeeds if fInvMatrix is upscalin g) 202 * (in this case, we have the inverse, so it succeeds if fInvMatrix is upscalin g)
203 */ 203 */
204 void SkBitmapProcState::processMediumRequest() { 204 void SkBitmapProcState::processMediumRequest() {
205 SkASSERT(SkPaint::kMedium_FilterLevel == fFilterLevel); 205 SkASSERT(kMedium_SkFilterQuality == fFilterLevel);
206 206
207 // Our default return state is to downgrade the request to Low, w/ or w/o se tting fBitmap 207 // Our default return state is to downgrade the request to Low, w/ or w/o se tting fBitmap
208 // to a valid bitmap. 208 // to a valid bitmap.
209 fFilterLevel = SkPaint::kLow_FilterLevel; 209 fFilterLevel = kLow_SkFilterQuality;
210 210
211 SkScalar invScale = effective_matrix_scale(fInvMatrix); 211 SkScalar invScale = effective_matrix_scale(fInvMatrix);
212 212
213 if (invScale > SK_Scalar1) { 213 if (invScale > SK_Scalar1) {
214 fCurrMip.reset(SkMipMapCache::FindAndRef(fOrigBitmap)); 214 fCurrMip.reset(SkMipMapCache::FindAndRef(fOrigBitmap));
215 if (NULL == fCurrMip.get()) { 215 if (NULL == fCurrMip.get()) {
216 fCurrMip.reset(SkMipMapCache::AddAndRef(fOrigBitmap)); 216 fCurrMip.reset(SkMipMapCache::AddAndRef(fOrigBitmap));
217 if (NULL == fCurrMip.get()) { 217 if (NULL == fCurrMip.get()) {
218 return; 218 return;
219 } 219 }
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 * - sometimes we will "ignore" Low and give None, but this is likely a legacy perf hack 282 * - sometimes we will "ignore" Low and give None, but this is likely a legacy perf hack
283 * and may be removed. 283 * and may be removed.
284 */ 284 */
285 bool SkBitmapProcState::chooseProcs(const SkMatrix& inv, const SkPaint& paint) { 285 bool SkBitmapProcState::chooseProcs(const SkMatrix& inv, const SkPaint& paint) {
286 if (!valid_for_drawing(fOrigBitmap)) { 286 if (!valid_for_drawing(fOrigBitmap)) {
287 return false; 287 return false;
288 } 288 }
289 289
290 fBitmap = NULL; 290 fBitmap = NULL;
291 fInvMatrix = inv; 291 fInvMatrix = inv;
292 fFilterLevel = paint.getFilterLevel(); 292 fFilterLevel = paint.getFilterQuality();
293 293
294 if (SkPaint::kHigh_FilterLevel == fFilterLevel) { 294 if (kHigh_SkFilterQuality == fFilterLevel) {
295 this->processHQRequest(); 295 this->processHQRequest();
296 } 296 }
297 SkASSERT(fFilterLevel < SkPaint::kHigh_FilterLevel); 297 SkASSERT(fFilterLevel < kHigh_SkFilterQuality);
298 298
299 if (SkPaint::kMedium_FilterLevel == fFilterLevel) { 299 if (kMedium_SkFilterQuality == fFilterLevel) {
300 this->processMediumRequest(); 300 this->processMediumRequest();
301 } 301 }
302 SkASSERT(fFilterLevel < SkPaint::kMedium_FilterLevel); 302 SkASSERT(fFilterLevel < kMedium_SkFilterQuality);
303 303
304 if (NULL == fBitmap) { 304 if (NULL == fBitmap) {
305 if (!this->lockBaseBitmap()) { 305 if (!this->lockBaseBitmap()) {
306 return false; 306 return false;
307 } 307 }
308 } 308 }
309 SkASSERT(fBitmap); 309 SkASSERT(fBitmap);
310 310
311 bool trivialMatrix = (fInvMatrix.getType() & ~SkMatrix::kTranslate_Mask) == 0; 311 bool trivialMatrix = (fInvMatrix.getType() & ~SkMatrix::kTranslate_Mask) == 0;
312 bool clampClamp = SkShader::kClamp_TileMode == fTileModeX && 312 bool clampClamp = SkShader::kClamp_TileMode == fTileModeX &&
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 fShaderProc32 = NULL; 355 fShaderProc32 = NULL;
356 fShaderProc16 = NULL; 356 fShaderProc16 = NULL;
357 fSampleProc32 = NULL; 357 fSampleProc32 = NULL;
358 fSampleProc16 = NULL; 358 fSampleProc16 = NULL;
359 359
360 // recompute the triviality of the matrix here because we may have 360 // recompute the triviality of the matrix here because we may have
361 // changed it! 361 // changed it!
362 362
363 trivialMatrix = (fInvMatrix.getType() & ~SkMatrix::kTranslate_Mask) == 0; 363 trivialMatrix = (fInvMatrix.getType() & ~SkMatrix::kTranslate_Mask) == 0;
364 364
365 if (SkPaint::kLow_FilterLevel == fFilterLevel) { 365 if (kLow_SkFilterQuality == fFilterLevel) {
366 // Only try bilerp if the matrix is "interesting" and 366 // Only try bilerp if the matrix is "interesting" and
367 // the image has a suitable size. 367 // the image has a suitable size.
368 368
369 if (fInvType <= SkMatrix::kTranslate_Mask || 369 if (fInvType <= SkMatrix::kTranslate_Mask ||
370 !valid_for_filtering(fBitmap->width() | fBitmap->height())) 370 !valid_for_filtering(fBitmap->width() | fBitmap->height()))
371 { 371 {
372 fFilterLevel = SkPaint::kNone_FilterLevel; 372 fFilterLevel = kNone_SkFilterQuality;
373 } 373 }
374 } 374 }
375 375
376 return this->chooseScanlineProcs(trivialMatrix, clampClamp, paint); 376 return this->chooseScanlineProcs(trivialMatrix, clampClamp, paint);
377 } 377 }
378 378
379 bool SkBitmapProcState::chooseScanlineProcs(bool trivialMatrix, bool clampClamp, 379 bool SkBitmapProcState::chooseScanlineProcs(bool trivialMatrix, bool clampClamp,
380 const SkPaint& paint) { 380 const SkPaint& paint) {
381 fMatrixProc = this->chooseMatrixProc(trivialMatrix); 381 fMatrixProc = this->chooseMatrixProc(trivialMatrix);
382 // TODO(dominikg): SkASSERT(fMatrixProc) instead? chooseMatrixProc never ret urns NULL. 382 // TODO(dominikg): SkASSERT(fMatrixProc) instead? chooseMatrixProc never ret urns NULL.
383 if (NULL == fMatrixProc) { 383 if (NULL == fMatrixProc) {
384 return false; 384 return false;
385 } 385 }
386 386
387 /////////////////////////////////////////////////////////////////////// 387 ///////////////////////////////////////////////////////////////////////
388 388
389 const SkAlphaType at = fBitmap->alphaType(); 389 const SkAlphaType at = fBitmap->alphaType();
390 390
391 // No need to do this if we're doing HQ sampling; if filter quality is 391 // No need to do this if we're doing HQ sampling; if filter quality is
392 // still set to HQ by the time we get here, then we must have installed 392 // still set to HQ by the time we get here, then we must have installed
393 // the shader procs above and can skip all this. 393 // the shader procs above and can skip all this.
394 394
395 if (fFilterLevel < SkPaint::kHigh_FilterLevel) { 395 if (fFilterLevel < kHigh_SkFilterQuality) {
396 396
397 int index = 0; 397 int index = 0;
398 if (fAlphaScale < 256) { // note: this distinction is not used for D16 398 if (fAlphaScale < 256) { // note: this distinction is not used for D16
399 index |= 1; 399 index |= 1;
400 } 400 }
401 if (fInvType <= (SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)) { 401 if (fInvType <= (SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)) {
402 index |= 2; 402 index |= 2;
403 } 403 }
404 if (fFilterLevel > SkPaint::kNone_FilterLevel) { 404 if (fFilterLevel > kNone_SkFilterQuality) {
405 index |= 4; 405 index |= 4;
406 } 406 }
407 // bits 3,4,5 encoding the source bitmap format 407 // bits 3,4,5 encoding the source bitmap format
408 switch (fBitmap->colorType()) { 408 switch (fBitmap->colorType()) {
409 case kN32_SkColorType: 409 case kN32_SkColorType:
410 if (kPremul_SkAlphaType != at && kOpaque_SkAlphaType != at) { 410 if (kPremul_SkAlphaType != at && kOpaque_SkAlphaType != at) {
411 return false; 411 return false;
412 } 412 }
413 index |= 0; 413 index |= 0;
414 break; 414 break;
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
537 return true; 537 return true;
538 } 538 }
539 539
540 static void Clamp_S32_D32_nofilter_trans_shaderproc(const SkBitmapProcState& s, 540 static void Clamp_S32_D32_nofilter_trans_shaderproc(const SkBitmapProcState& s,
541 int x, int y, 541 int x, int y,
542 SkPMColor* SK_RESTRICT color s, 542 SkPMColor* SK_RESTRICT color s,
543 int count) { 543 int count) {
544 SkASSERT(((s.fInvType & ~SkMatrix::kTranslate_Mask)) == 0); 544 SkASSERT(((s.fInvType & ~SkMatrix::kTranslate_Mask)) == 0);
545 SkASSERT(s.fInvKy == 0); 545 SkASSERT(s.fInvKy == 0);
546 SkASSERT(count > 0 && colors != NULL); 546 SkASSERT(count > 0 && colors != NULL);
547 SkASSERT(SkPaint::kNone_FilterLevel == s.fFilterLevel); 547 SkASSERT(kNone_SkFilterQuality == s.fFilterLevel);
548 548
549 const int maxX = s.fBitmap->width() - 1; 549 const int maxX = s.fBitmap->width() - 1;
550 const int maxY = s.fBitmap->height() - 1; 550 const int maxY = s.fBitmap->height() - 1;
551 int ix = s.fFilterOneX + x; 551 int ix = s.fFilterOneX + x;
552 int iy = SkClampMax(s.fFilterOneY + y, maxY); 552 int iy = SkClampMax(s.fFilterOneY + y, maxY);
553 #ifdef SK_DEBUG 553 #ifdef SK_DEBUG
554 { 554 {
555 SkPoint pt; 555 SkPoint pt;
556 s.fInvProc(s.fInvMatrix, SkIntToScalar(x) + SK_ScalarHalf, 556 s.fInvProc(s.fInvMatrix, SkIntToScalar(x) + SK_ScalarHalf,
557 SkIntToScalar(y) + SK_ScalarHalf, &pt); 557 SkIntToScalar(y) + SK_ScalarHalf, &pt);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
611 return x; 611 return x;
612 } 612 }
613 613
614 static void Repeat_S32_D32_nofilter_trans_shaderproc(const SkBitmapProcState& s, 614 static void Repeat_S32_D32_nofilter_trans_shaderproc(const SkBitmapProcState& s,
615 int x, int y, 615 int x, int y,
616 SkPMColor* SK_RESTRICT colo rs, 616 SkPMColor* SK_RESTRICT colo rs,
617 int count) { 617 int count) {
618 SkASSERT(((s.fInvType & ~SkMatrix::kTranslate_Mask)) == 0); 618 SkASSERT(((s.fInvType & ~SkMatrix::kTranslate_Mask)) == 0);
619 SkASSERT(s.fInvKy == 0); 619 SkASSERT(s.fInvKy == 0);
620 SkASSERT(count > 0 && colors != NULL); 620 SkASSERT(count > 0 && colors != NULL);
621 SkASSERT(SkPaint::kNone_FilterLevel == s.fFilterLevel); 621 SkASSERT(kNone_SkFilterQuality == s.fFilterLevel);
622 622
623 const int stopX = s.fBitmap->width(); 623 const int stopX = s.fBitmap->width();
624 const int stopY = s.fBitmap->height(); 624 const int stopY = s.fBitmap->height();
625 int ix = s.fFilterOneX + x; 625 int ix = s.fFilterOneX + x;
626 int iy = sk_int_mod(s.fFilterOneY + y, stopY); 626 int iy = sk_int_mod(s.fFilterOneY + y, stopY);
627 #ifdef SK_DEBUG 627 #ifdef SK_DEBUG
628 { 628 {
629 SkPoint pt; 629 SkPoint pt;
630 s.fInvProc(s.fInvMatrix, SkIntToScalar(x) + SK_ScalarHalf, 630 s.fInvProc(s.fInvMatrix, SkIntToScalar(x) + SK_ScalarHalf,
631 SkIntToScalar(y) + SK_ScalarHalf, &pt); 631 SkIntToScalar(y) + SK_ScalarHalf, &pt);
(...skipping 25 matching lines...) Expand all
657 int count) { 657 int count) {
658 SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)) == 0); 658 SkASSERT((s.fInvType & ~(SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)) == 0);
659 SkASSERT(s.fInvKy == 0); 659 SkASSERT(s.fInvKy == 0);
660 SkASSERT(count > 0 && colors != NULL); 660 SkASSERT(count > 0 && colors != NULL);
661 SkASSERT(1 == s.fBitmap->width()); 661 SkASSERT(1 == s.fBitmap->width());
662 662
663 int iY0; 663 int iY0;
664 int iY1 SK_INIT_TO_AVOID_WARNING; 664 int iY1 SK_INIT_TO_AVOID_WARNING;
665 int iSubY SK_INIT_TO_AVOID_WARNING; 665 int iSubY SK_INIT_TO_AVOID_WARNING;
666 666
667 if (SkPaint::kNone_FilterLevel != s.fFilterLevel) { 667 if (kNone_SkFilterQuality != s.fFilterLevel) {
668 SkBitmapProcState::MatrixProc mproc = s.getMatrixProc(); 668 SkBitmapProcState::MatrixProc mproc = s.getMatrixProc();
669 uint32_t xy[2]; 669 uint32_t xy[2];
670 670
671 mproc(s, xy, 1, x, y); 671 mproc(s, xy, 1, x, y);
672 672
673 iY0 = xy[0] >> 18; 673 iY0 = xy[0] >> 18;
674 iY1 = xy[0] & 0x3FFF; 674 iY1 = xy[0] & 0x3FFF;
675 iSubY = (xy[0] >> 14) & 0xF; 675 iSubY = (xy[0] >> 14) & 0xF;
676 } else { 676 } else {
677 int yTemp; 677 int yTemp;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
738 } 738 }
739 739
740 SkASSERT(iY0 == iY2); 740 SkASSERT(iY0 == iY2);
741 } 741 }
742 #endif 742 #endif
743 } 743 }
744 744
745 const SkPMColor* row0 = s.fBitmap->getAddr32(0, iY0); 745 const SkPMColor* row0 = s.fBitmap->getAddr32(0, iY0);
746 SkPMColor color; 746 SkPMColor color;
747 747
748 if (SkPaint::kNone_FilterLevel != s.fFilterLevel) { 748 if (kNone_SkFilterQuality != s.fFilterLevel) {
749 const SkPMColor* row1 = s.fBitmap->getAddr32(0, iY1); 749 const SkPMColor* row1 = s.fBitmap->getAddr32(0, iY1);
750 750
751 if (s.fAlphaScale < 256) { 751 if (s.fAlphaScale < 256) {
752 Filter_32_alpha(iSubY, *row0, *row1, &color, s.fAlphaScale); 752 Filter_32_alpha(iSubY, *row0, *row1, &color, s.fAlphaScale);
753 } else { 753 } else {
754 Filter_32_opaque(iSubY, *row0, *row1, &color); 754 Filter_32_opaque(iSubY, *row0, *row1, &color);
755 } 755 }
756 } else { 756 } else {
757 if (s.fAlphaScale < 256) { 757 if (s.fAlphaScale < 256) {
758 color = SkAlphaMulQ(*row0, s.fAlphaScale); 758 color = SkAlphaMulQ(*row0, s.fAlphaScale);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
794 794
795 SkBitmapProcState::ShaderProc32 SkBitmapProcState::chooseShaderProc32() { 795 SkBitmapProcState::ShaderProc32 SkBitmapProcState::chooseShaderProc32() {
796 796
797 if (kN32_SkColorType != fBitmap->colorType()) { 797 if (kN32_SkColorType != fBitmap->colorType()) {
798 return NULL; 798 return NULL;
799 } 799 }
800 800
801 static const unsigned kMask = SkMatrix::kTranslate_Mask | SkMatrix::kScale_M ask; 801 static const unsigned kMask = SkMatrix::kTranslate_Mask | SkMatrix::kScale_M ask;
802 802
803 if (1 == fBitmap->width() && 0 == (fInvType & ~kMask)) { 803 if (1 == fBitmap->width() && 0 == (fInvType & ~kMask)) {
804 if (SkPaint::kNone_FilterLevel == fFilterLevel && 804 if (kNone_SkFilterQuality == fFilterLevel &&
805 fInvType <= SkMatrix::kTranslate_Mask && 805 fInvType <= SkMatrix::kTranslate_Mask &&
806 !this->setupForTranslate()) { 806 !this->setupForTranslate()) {
807 return DoNothing_shaderproc; 807 return DoNothing_shaderproc;
808 } 808 }
809 return S32_D32_constX_shaderproc; 809 return S32_D32_constX_shaderproc;
810 } 810 }
811 811
812 if (fAlphaScale < 256) { 812 if (fAlphaScale < 256) {
813 return NULL; 813 return NULL;
814 } 814 }
815 if (fInvType > SkMatrix::kTranslate_Mask) { 815 if (fInvType > SkMatrix::kTranslate_Mask) {
816 return NULL; 816 return NULL;
817 } 817 }
818 if (SkPaint::kNone_FilterLevel != fFilterLevel) { 818 if (kNone_SkFilterQuality != fFilterLevel) {
819 return NULL; 819 return NULL;
820 } 820 }
821 821
822 SkShader::TileMode tx = (SkShader::TileMode)fTileModeX; 822 SkShader::TileMode tx = (SkShader::TileMode)fTileModeX;
823 SkShader::TileMode ty = (SkShader::TileMode)fTileModeY; 823 SkShader::TileMode ty = (SkShader::TileMode)fTileModeY;
824 824
825 if (SkShader::kClamp_TileMode == tx && SkShader::kClamp_TileMode == ty) { 825 if (SkShader::kClamp_TileMode == tx && SkShader::kClamp_TileMode == ty) {
826 if (this->setupForTranslate()) { 826 if (this->setupForTranslate()) {
827 return Clamp_S32_D32_nofilter_trans_shaderproc; 827 return Clamp_S32_D32_nofilter_trans_shaderproc;
828 } 828 }
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
904 SkASSERT(count > 0); 904 SkASSERT(count > 0);
905 905
906 state.fMatrixProc(state, bitmapXY, count, x, y); 906 state.fMatrixProc(state, bitmapXY, count, x, y);
907 907
908 void (*proc)(uint32_t bitmapXY[], int count, unsigned mx, unsigned my); 908 void (*proc)(uint32_t bitmapXY[], int count, unsigned mx, unsigned my);
909 909
910 // There are four formats possible: 910 // There are four formats possible:
911 // scale -vs- affine 911 // scale -vs- affine
912 // filter -vs- nofilter 912 // filter -vs- nofilter
913 if (state.fInvType <= (SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)) { 913 if (state.fInvType <= (SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)) {
914 proc = state.fFilterLevel != SkPaint::kNone_FilterLevel ? check_scale_fi lter : check_scale_nofilter; 914 proc = state.fFilterLevel != kNone_SkFilterQuality ? check_scale_filter : check_scale_nofilter;
915 } else { 915 } else {
916 proc = state.fFilterLevel != SkPaint::kNone_FilterLevel ? check_affine_f ilter : check_affine_nofilter; 916 proc = state.fFilterLevel != kNone_SkFilterQuality ? check_affine_filter : check_affine_nofilter;
917 } 917 }
918 proc(bitmapXY, count, state.fBitmap->width(), state.fBitmap->height()); 918 proc(bitmapXY, count, state.fBitmap->width(), state.fBitmap->height());
919 } 919 }
920 920
921 SkBitmapProcState::MatrixProc SkBitmapProcState::getMatrixProc() const { 921 SkBitmapProcState::MatrixProc SkBitmapProcState::getMatrixProc() const {
922 return DebugMatrixProc; 922 return DebugMatrixProc;
923 } 923 }
924 924
925 #endif 925 #endif
926 926
(...skipping 14 matching lines...) Expand all
941 if (fInvType <= (SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)) { 941 if (fInvType <= (SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)) {
942 size -= 4; // the shared Y (or YY) coordinate 942 size -= 4; // the shared Y (or YY) coordinate
943 if (size < 0) { 943 if (size < 0) {
944 size = 0; 944 size = 0;
945 } 945 }
946 size >>= 1; 946 size >>= 1;
947 } else { 947 } else {
948 size >>= 2; 948 size >>= 2;
949 } 949 }
950 950
951 if (fFilterLevel != SkPaint::kNone_FilterLevel) { 951 if (fFilterLevel != kNone_SkFilterQuality) {
952 size >>= 1; 952 size >>= 1;
953 } 953 }
954 954
955 return size; 955 return size;
956 } 956 }
957 957
958 /////////////////////// 958 ///////////////////////
959 959
960 void Clamp_S32_opaque_D32_nofilter_DX_shaderproc(const SkBitmapProcState& s, in t x, int y, 960 void Clamp_S32_opaque_D32_nofilter_DX_shaderproc(const SkBitmapProcState& s, in t x, int y,
961 SkPMColor* SK_RESTRICT dst, in t count) { 961 SkPMColor* SK_RESTRICT dst, in t count) {
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1002 fx += dx; 1002 fx += dx;
1003 } 1003 }
1004 } else { 1004 } else {
1005 for (int i = 0; i < count; ++i) { 1005 for (int i = 0; i < count; ++i) {
1006 dst[i] = src[SkClampMax(SkFractionalIntToInt(fx), maxX)]; 1006 dst[i] = src[SkClampMax(SkFractionalIntToInt(fx), maxX)];
1007 fx += dx; 1007 fx += dx;
1008 } 1008 }
1009 } 1009 }
1010 } 1010 }
1011 1011
OLDNEW
« no previous file with comments | « src/core/SkBitmapProcShader.cpp ('k') | src/core/SkBitmapProcState_matrixProcs.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698