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 "SkColorPriv.h" | 8 #include "SkColorPriv.h" |
9 #include "SkReadBuffer.h" | 9 #include "SkReadBuffer.h" |
10 #include "SkWriteBuffer.h" | 10 #include "SkWriteBuffer.h" |
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
342 | 342 |
343 str->append(")"); | 343 str->append(")"); |
344 } | 344 } |
345 #endif | 345 #endif |
346 | 346 |
347 /////////////////////////////////////////////////////////////////////////////// | 347 /////////////////////////////////////////////////////////////////////////////// |
348 | 348 |
349 #if SK_SUPPORT_GPU | 349 #if SK_SUPPORT_GPU |
350 | 350 |
351 #include "GrTextureAccess.h" | 351 #include "GrTextureAccess.h" |
| 352 #include "SkGr.h" |
352 #include "effects/GrSimpleTextureEffect.h" | 353 #include "effects/GrSimpleTextureEffect.h" |
353 #include "SkGr.h" | |
354 | 354 |
355 bool SkBitmapProcShader::asFragmentProcessor(GrContext* context, const SkPaint&
paint, | 355 bool SkBitmapProcShader::asFragmentProcessor(GrContext* context, const SkPaint&
paint, |
356 const SkMatrix& viewM, | 356 const SkMatrix& viewM, |
357 const SkMatrix* localMatrix, GrColo
r* paintColor, | 357 const SkMatrix* localMatrix, GrColo
r* paintColor, |
358 GrProcessorDataManager* procDataMan
ager, | 358 GrProcessorDataManager* procDataMan
ager, |
359 GrFragmentProcessor** fp) const { | 359 GrFragmentProcessor** fp) const { |
360 SkMatrix matrix; | 360 SkMatrix matrix; |
361 matrix.setIDiv(fRawBitmap.width(), fRawBitmap.height()); | 361 matrix.setIDiv(fRawBitmap.width(), fRawBitmap.height()); |
362 | 362 |
363 SkMatrix lmInverse; | 363 SkMatrix lmInverse; |
(...skipping 11 matching lines...) Expand all Loading... |
375 | 375 |
376 SkShader::TileMode tm[] = { | 376 SkShader::TileMode tm[] = { |
377 (TileMode)fTileModeX, | 377 (TileMode)fTileModeX, |
378 (TileMode)fTileModeY, | 378 (TileMode)fTileModeY, |
379 }; | 379 }; |
380 | 380 |
381 // Must set wrap and filter on the sampler before requesting a texture. In t
wo places below | 381 // Must set wrap and filter on the sampler before requesting a texture. In t
wo places below |
382 // we check the matrix scale factors to determine how to interpret the filte
r quality setting. | 382 // we check the matrix scale factors to determine how to interpret the filte
r quality setting. |
383 // This completely ignores the complexity of the drawVertices case where exp
licit local coords | 383 // This completely ignores the complexity of the drawVertices case where exp
licit local coords |
384 // are provided by the caller. | 384 // are provided by the caller. |
385 bool useBicubic = false; | 385 bool doBicubic; |
386 GrTextureParams::FilterMode textureFilterMode; | 386 GrTextureParams::FilterMode textureFilterMode = |
387 switch(paint.getFilterQuality()) { | 387 GrSkFilterQualityToGrFilterMode(paint.getFilterQuality(), viewM, thi
s->getLocalMatrix(), |
388 case kNone_SkFilterQuality: | 388 &doBicubic); |
389 textureFilterMode = GrTextureParams::kNone_FilterMode; | |
390 break; | |
391 case kLow_SkFilterQuality: | |
392 textureFilterMode = GrTextureParams::kBilerp_FilterMode; | |
393 break; | |
394 case kMedium_SkFilterQuality: { | |
395 SkMatrix matrix; | |
396 matrix.setConcat(viewM, this->getLocalMatrix()); | |
397 if (matrix.getMinScale() < SK_Scalar1) { | |
398 textureFilterMode = GrTextureParams::kMipMap_FilterMode; | |
399 } else { | |
400 // Don't trigger MIP level generation unnecessarily. | |
401 textureFilterMode = GrTextureParams::kBilerp_FilterMode; | |
402 } | |
403 break; | |
404 } | |
405 case kHigh_SkFilterQuality: { | |
406 SkMatrix matrix; | |
407 matrix.setConcat(viewM, this->getLocalMatrix()); | |
408 useBicubic = GrBicubicEffect::ShouldUseBicubic(matrix, &textureFilte
rMode); | |
409 break; | |
410 } | |
411 default: | |
412 SkErrorInternals::SetError( kInvalidPaint_SkError, | |
413 "Sorry, I don't understand the filtering
" | |
414 "mode you asked for. Falling back to " | |
415 "MIPMaps."); | |
416 textureFilterMode = GrTextureParams::kMipMap_FilterMode; | |
417 break; | |
418 | |
419 } | |
420 GrTextureParams params(tm, textureFilterMode); | 389 GrTextureParams params(tm, textureFilterMode); |
421 SkAutoTUnref<GrTexture> texture(GrRefCachedBitmapTexture(context, fRawBitmap
, ¶ms)); | 390 SkAutoTUnref<GrTexture> texture(GrRefCachedBitmapTexture(context, fRawBitmap
, ¶ms)); |
422 | 391 |
423 if (!texture) { | 392 if (!texture) { |
424 SkErrorInternals::SetError( kInternalError_SkError, | 393 SkErrorInternals::SetError( kInternalError_SkError, |
425 "Couldn't convert bitmap to texture."); | 394 "Couldn't convert bitmap to texture."); |
426 return false; | 395 return false; |
427 } | 396 } |
428 | 397 |
429 *paintColor = (kAlpha_8_SkColorType == fRawBitmap.colorType()) ? | 398 *paintColor = (kAlpha_8_SkColorType == fRawBitmap.colorType()) ? |
430 SkColor2GrColor(paint.getColor()
) : | 399 SkColor2GrColor(paint.getColor()
) : |
431 SkColor2GrColorJustAlpha(paint.g
etColor()); | 400 SkColor2GrColorJustAlpha(paint.g
etColor()); |
432 | 401 |
433 if (useBicubic) { | 402 if (doBicubic) { |
434 *fp = GrBicubicEffect::Create(procDataManager, texture, matrix, tm); | 403 *fp = GrBicubicEffect::Create(procDataManager, texture, matrix, tm); |
435 } else { | 404 } else { |
436 *fp = GrSimpleTextureEffect::Create(procDataManager, texture, matrix, pa
rams); | 405 *fp = GrSimpleTextureEffect::Create(procDataManager, texture, matrix, pa
rams); |
437 } | 406 } |
438 | 407 |
439 return true; | 408 return true; |
440 } | 409 } |
441 | 410 |
442 #else | 411 #else |
443 | 412 |
444 bool SkBitmapProcShader::asFragmentProcessor(GrContext*, const SkPaint&, const S
kMatrix&, | 413 bool SkBitmapProcShader::asFragmentProcessor(GrContext*, const SkPaint&, const S
kMatrix&, |
445 const SkMatrix*, GrColor*, GrProces
sorDataManager*, | 414 const SkMatrix*, GrColor*, GrProces
sorDataManager*, |
446 GrFragmentProcessor**) const { | 415 GrFragmentProcessor**) const { |
447 SkDEBUGFAIL("Should not call in GPU-less build"); | 416 SkDEBUGFAIL("Should not call in GPU-less build"); |
448 return false; | 417 return false; |
449 } | 418 } |
450 | 419 |
451 #endif | 420 #endif |
OLD | NEW |