| 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 "SkBitmapProcShader.h" | |
| 9 #include "SkColorPriv.h" | 8 #include "SkColorPriv.h" |
| 10 #include "SkFlattenableBuffers.h" | 9 #include "SkFlattenableBuffers.h" |
| 11 #include "SkPixelRef.h" | 10 #include "SkPixelRef.h" |
| 12 #include "SkErrorInternals.h" | 11 #include "SkErrorInternals.h" |
| 12 #include "SkBitmapProcShader.h" |
| 13 |
| 14 #include "effects/GrSimpleTextureEffect.h" |
| 15 #include "effects/GrBicubicEffect.h" |
| 13 | 16 |
| 14 bool SkBitmapProcShader::CanDo(const SkBitmap& bm, TileMode tx, TileMode ty) { | 17 bool SkBitmapProcShader::CanDo(const SkBitmap& bm, TileMode tx, TileMode ty) { |
| 15 switch (bm.config()) { | 18 switch (bm.config()) { |
| 16 case SkBitmap::kA8_Config: | 19 case SkBitmap::kA8_Config: |
| 17 case SkBitmap::kRGB_565_Config: | 20 case SkBitmap::kRGB_565_Config: |
| 18 case SkBitmap::kIndex8_Config: | 21 case SkBitmap::kIndex8_Config: |
| 19 case SkBitmap::kARGB_8888_Config: | 22 case SkBitmap::kARGB_8888_Config: |
| 20 // if (tx == ty && (kClamp_TileMode == tx || kRepeat_TileMode == tx)) | 23 // if (tx == ty && (kClamp_TileMode == tx || kRepeat_TileMode == tx)) |
| 21 return true; | 24 return true; |
| 22 default: | 25 default: |
| (...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 360 case SkPaint::kNone_FilterLevel: | 363 case SkPaint::kNone_FilterLevel: |
| 361 textureFilterMode = GrTextureParams::kNone_FilterMode; | 364 textureFilterMode = GrTextureParams::kNone_FilterMode; |
| 362 break; | 365 break; |
| 363 case SkPaint::kLow_FilterLevel: | 366 case SkPaint::kLow_FilterLevel: |
| 364 textureFilterMode = GrTextureParams::kBilerp_FilterMode; | 367 textureFilterMode = GrTextureParams::kBilerp_FilterMode; |
| 365 break; | 368 break; |
| 366 case SkPaint::kMedium_FilterLevel: | 369 case SkPaint::kMedium_FilterLevel: |
| 367 textureFilterMode = GrTextureParams::kMipMap_FilterMode; | 370 textureFilterMode = GrTextureParams::kMipMap_FilterMode; |
| 368 break; | 371 break; |
| 369 case SkPaint::kHigh_FilterLevel: | 372 case SkPaint::kHigh_FilterLevel: |
| 370 SkErrorInternals::SetError( kInvalidPaint_SkError, | 373 // fall back to no filtering here; we will install another |
| 371 "Sorry, I don't yet support high quality
" | 374 // shader that will do the HQ filtering. |
| 372 "filtering on the GPU; falling back to " | 375 textureFilterMode = GrTextureParams::kNone_FilterMode; |
| 373 "MIPMaps."); | |
| 374 textureFilterMode = GrTextureParams::kMipMap_FilterMode; | |
| 375 break; | 376 break; |
| 376 default: | 377 default: |
| 377 SkErrorInternals::SetError( kInvalidPaint_SkError, | 378 SkErrorInternals::SetError( kInvalidPaint_SkError, |
| 378 "Sorry, I don't understand the filtering
" | 379 "Sorry, I don't understand the filtering
" |
| 379 "mode you asked for. Falling back to " | 380 "mode you asked for. Falling back to " |
| 380 "MIPMaps."); | 381 "MIPMaps."); |
| 381 textureFilterMode = GrTextureParams::kMipMap_FilterMode; | 382 textureFilterMode = GrTextureParams::kMipMap_FilterMode; |
| 382 break; | 383 break; |
| 383 | 384 |
| 384 } | 385 } |
| 385 GrTextureParams params(tm, textureFilterMode); | 386 GrTextureParams params(tm, textureFilterMode); |
| 386 GrTexture* texture = GrLockAndRefCachedBitmapTexture(context, fRawBitmap, &p
arams); | 387 GrTexture* texture = GrLockAndRefCachedBitmapTexture(context, fRawBitmap, &p
arams); |
| 387 | 388 |
| 388 if (NULL == texture) { | 389 if (NULL == texture) { |
| 389 SkDebugf("Couldn't convert bitmap to texture.\n"); | 390 SkErrorInternals::SetError( kInternalError_SkError, |
| 391 "Couldn't convert bitmap to texture."); |
| 390 return NULL; | 392 return NULL; |
| 391 } | 393 } |
| 392 | 394 |
| 393 GrEffectRef* effect = GrSimpleTextureEffect::Create(texture, matrix, params)
; | 395 GrEffectRef* effect = NULL; |
| 396 if (paintFilterLevel == SkPaint::kHigh_FilterLevel) { |
| 397 effect = GrBicubicEffect::Create(texture, matrix, params); |
| 398 } else { |
| 399 effect = GrSimpleTextureEffect::Create(texture, matrix, params); |
| 400 } |
| 394 GrUnlockAndUnrefCachedBitmapTexture(texture); | 401 GrUnlockAndUnrefCachedBitmapTexture(texture); |
| 395 return effect; | 402 return effect; |
| 396 } | 403 } |
| 397 #endif | 404 #endif |
| OLD | NEW |