Chromium Code Reviews| 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" | 8 #include "SkBitmapProcShader.h" |
| 9 #include "SkColorPriv.h" | 9 #include "SkColorPriv.h" |
| 10 #include "SkFlattenableBuffers.h" | 10 #include "SkFlattenableBuffers.h" |
| 11 #include "SkPixelRef.h" | 11 #include "SkPixelRef.h" |
| 12 #include "SkErrorInternals.h" | |
| 12 | 13 |
| 13 bool SkBitmapProcShader::CanDo(const SkBitmap& bm, TileMode tx, TileMode ty) { | 14 bool SkBitmapProcShader::CanDo(const SkBitmap& bm, TileMode tx, TileMode ty) { |
| 14 switch (bm.config()) { | 15 switch (bm.config()) { |
| 15 case SkBitmap::kA8_Config: | 16 case SkBitmap::kA8_Config: |
| 16 case SkBitmap::kRGB_565_Config: | 17 case SkBitmap::kRGB_565_Config: |
| 17 case SkBitmap::kIndex8_Config: | 18 case SkBitmap::kIndex8_Config: |
| 18 case SkBitmap::kARGB_8888_Config: | 19 case SkBitmap::kARGB_8888_Config: |
| 19 // if (tx == ty && (kClamp_TileMode == tx || kRepeat_TileMode == tx)) | 20 // if (tx == ty && (kClamp_TileMode == tx || kRepeat_TileMode == tx)) |
| 20 return true; | 21 return true; |
| 21 default: | 22 default: |
| (...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 346 return NULL; | 347 return NULL; |
| 347 } | 348 } |
| 348 matrix.preConcat(inverse); | 349 matrix.preConcat(inverse); |
| 349 } | 350 } |
| 350 SkShader::TileMode tm[] = { | 351 SkShader::TileMode tm[] = { |
| 351 (TileMode)fState.fTileModeX, | 352 (TileMode)fState.fTileModeX, |
| 352 (TileMode)fState.fTileModeY, | 353 (TileMode)fState.fTileModeY, |
| 353 }; | 354 }; |
| 354 | 355 |
| 355 // Must set wrap and filter on the sampler before requesting a texture. | 356 // Must set wrap and filter on the sampler before requesting a texture. |
| 356 GrTextureParams params(tm, paint.isFilterBitmap()); | 357 SkPaint::FilterLevel paintFilterLevel = paint.getFilterLevel(); |
| 358 GrTextureParams::FilterMode textureFilterMode; | |
| 359 switch(paintFilterLevel) { | |
| 360 case SkPaint::kNone_FilterLevel: | |
| 361 textureFilterMode = GrTextureParams::kNone_FilterMode; | |
| 362 break; | |
| 363 case SkPaint::kLow_FilterLevel: | |
| 364 textureFilterMode = GrTextureParams::kBilerp_FilterMode; | |
| 365 break; | |
| 366 case SkPaint::kMedium_FilterLevel: | |
| 367 textureFilterMode = GrTextureParams::kMipMap_FilterMode; | |
| 368 break; | |
| 369 case SkPaint::kHigh_FilterLevel: | |
| 370 SkErrorInternals::SetError( kInvalidPaint_SkError, | |
| 371 "Sorry, I don't yet support high quality " | |
|
bsalomon
2013/07/25 17:41:48
can we log the error but just continue using mips?
humper
2013/07/25 18:18:13
sure. Done.
| |
| 372 "filtering on the GPU."); | |
| 373 return NULL; | |
| 374 } | |
| 375 GrTextureParams params(tm, textureFilterMode); | |
| 357 GrTexture* texture = GrLockAndRefCachedBitmapTexture(context, fRawBitmap, &p arams); | 376 GrTexture* texture = GrLockAndRefCachedBitmapTexture(context, fRawBitmap, &p arams); |
| 358 | 377 |
| 359 if (NULL == texture) { | 378 if (NULL == texture) { |
| 360 SkDebugf("Couldn't convert bitmap to texture.\n"); | 379 SkDebugf("Couldn't convert bitmap to texture.\n"); |
| 361 return NULL; | 380 return NULL; |
| 362 } | 381 } |
| 363 | 382 |
| 364 GrEffectRef* effect = GrSimpleTextureEffect::Create(texture, matrix, params) ; | 383 GrEffectRef* effect = GrSimpleTextureEffect::Create(texture, matrix, params) ; |
| 365 GrUnlockAndUnrefCachedBitmapTexture(texture); | 384 GrUnlockAndUnrefCachedBitmapTexture(texture); |
| 366 return effect; | 385 return effect; |
| 367 } | 386 } |
| 368 #endif | 387 #endif |
| OLD | NEW |