OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 #include "SkBitmapProcState.h" | 8 #include "SkBitmapProcState.h" |
9 #include "SkColorPriv.h" | 9 #include "SkColorPriv.h" |
10 #include "SkFilterProc.h" | 10 #include "SkFilterProc.h" |
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
369 // downgrade to bilerp. | 369 // downgrade to bilerp. |
370 | 370 |
371 // NOTE: Might need to be careful here in the future when we want | 371 // NOTE: Might need to be careful here in the future when we want |
372 // to have the platform proc have a shot at this; it's possible that | 372 // to have the platform proc have a shot at this; it's possible that |
373 // the chooseBitmapFilterProc will fail to install a shader but a | 373 // the chooseBitmapFilterProc will fail to install a shader but a |
374 // platform-specific one might succeed, so it might be premature here | 374 // platform-specific one might succeed, so it might be premature here |
375 // to fall back to bilerp. This needs thought. | 375 // to fall back to bilerp. This needs thought. |
376 | 376 |
377 SkASSERT(fInvType > SkMatrix::kTranslate_Mask); | 377 SkASSERT(fInvType > SkMatrix::kTranslate_Mask); |
378 | 378 |
379 fShaderProc32 = this->chooseBitmapFilterProc(); | 379 if (!this->setBitmapFilterProcs()) { |
380 if (!fShaderProc32) { | |
381 fFilterLevel = SkPaint::kLow_FilterLevel; | 380 fFilterLevel = SkPaint::kLow_FilterLevel; |
382 } | 381 } |
383 } | 382 } |
384 | 383 |
385 if (SkPaint::kLow_FilterLevel == fFilterLevel) { | 384 if (SkPaint::kLow_FilterLevel == fFilterLevel) { |
386 // Only try bilerp if the matrix is "interesting" and | 385 // Only try bilerp if the matrix is "interesting" and |
387 // the image has a suitable size. | 386 // the image has a suitable size. |
388 | 387 |
389 if (fInvType <= SkMatrix::kTranslate_Mask || | 388 if (fInvType <= SkMatrix::kTranslate_Mask || |
390 !valid_for_filtering(fBitmap->width() | fBitmap->height())) { | 389 !valid_for_filtering(fBitmap->width() | fBitmap->height())) { |
391 fFilterLevel = SkPaint::kNone_FilterLevel; | 390 fFilterLevel = SkPaint::kNone_FilterLevel; |
392 } | 391 } |
393 } | 392 } |
394 | 393 |
395 // At this point, we know exactly what kind of sampling the per-scanline | 394 // At this point, we know exactly what kind of sampling the per-scanline |
396 // shader will perform. | 395 // shader will perform. |
397 | 396 |
398 fMatrixProc = this->chooseMatrixProc(trivialMatrix); | 397 fMatrixProc = this->chooseMatrixProc(trivialMatrix); |
399 if (NULL == fMatrixProc) { | 398 if (NULL == fMatrixProc) { |
400 return false; | 399 return false; |
401 } | 400 } |
402 | 401 |
403 /////////////////////////////////////////////////////////////////////// | 402 /////////////////////////////////////////////////////////////////////// |
404 | 403 |
405 // No need to do this if we're doing HQ sampling; if filter quality is | 404 // No need to do this if we're doing HQ sampling; if filter quality is |
406 // still set to HQ by the time we get here, then we must have installed | 405 // still set to HQ by the time we get here, then we must have installed |
407 // the shader proc above and can skip all this. | 406 // the shader procs above and can skip all this. |
408 | 407 |
409 if (fFilterLevel < SkPaint::kHigh_FilterLevel) { | 408 if (fFilterLevel < SkPaint::kHigh_FilterLevel) { |
410 | 409 |
411 int index = 0; | 410 int index = 0; |
412 if (fAlphaScale < 256) { // note: this distinction is not used for D16 | 411 if (fAlphaScale < 256) { // note: this distinction is not used for D16 |
413 index |= 1; | 412 index |= 1; |
414 } | 413 } |
415 if (fInvType <= (SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)) { | 414 if (fInvType <= (SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)) { |
416 index |= 2; | 415 index |= 2; |
417 } | 416 } |
(...skipping 531 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
949 } else { | 948 } else { |
950 size >>= 2; | 949 size >>= 2; |
951 } | 950 } |
952 | 951 |
953 if (fFilterLevel != SkPaint::kNone_FilterLevel) { | 952 if (fFilterLevel != SkPaint::kNone_FilterLevel) { |
954 size >>= 1; | 953 size >>= 1; |
955 } | 954 } |
956 | 955 |
957 return size; | 956 return size; |
958 } | 957 } |
OLD | NEW |