OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 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 "GrTextureParamsAdjuster.h" | 8 #include "GrTextureParamsAdjuster.h" |
9 | 9 |
10 #include "GrCaps.h" | 10 #include "GrCaps.h" |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 (subset->width() != copyParams.fWidth || subset->height() != copyParams.
fHeight)) { | 86 (subset->width() != copyParams.fWidth || subset->height() != copyParams.
fHeight)) { |
87 SkRect domain; | 87 SkRect domain; |
88 domain.fLeft = (subset->fLeft + 0.5f) * sx; | 88 domain.fLeft = (subset->fLeft + 0.5f) * sx; |
89 domain.fTop = (subset->fTop + 0.5f)* sy; | 89 domain.fTop = (subset->fTop + 0.5f)* sy; |
90 domain.fRight = (subset->fRight - 0.5f) * sx; | 90 domain.fRight = (subset->fRight - 0.5f) * sx; |
91 domain.fBottom = (subset->fBottom - 0.5f) * sy; | 91 domain.fBottom = (subset->fBottom - 0.5f) * sy; |
92 // This would cause us to read values from outside the subset. Surely, t
he caller knows | 92 // This would cause us to read values from outside the subset. Surely, t
he caller knows |
93 // better! | 93 // better! |
94 SkASSERT(copyParams.fFilter != GrTextureParams::kMipMap_FilterMode); | 94 SkASSERT(copyParams.fFilter != GrTextureParams::kMipMap_FilterMode); |
95 paint.addColorFragmentProcessor( | 95 paint.addColorFragmentProcessor( |
96 GrTextureDomainEffect::Create(inputTexture, SkMatrix::I(), domain, | 96 GrTextureDomainEffect::Make(inputTexture, SkMatrix::I(), domain, |
97 GrTextureDomain::kClamp_Mode, | 97 GrTextureDomain::kClamp_Mode, |
98 copyParams.fFilter))->unref(); | 98 copyParams.fFilter)); |
99 } else { | 99 } else { |
100 GrTextureParams params(SkShader::kClamp_TileMode, copyParams.fFilter); | 100 GrTextureParams params(SkShader::kClamp_TileMode, copyParams.fFilter); |
101 paint.addColorTextureProcessor(inputTexture, SkMatrix::I(), params); | 101 paint.addColorTextureProcessor(inputTexture, SkMatrix::I(), params); |
102 } | 102 } |
103 paint.setPorterDuffXPFactory(SkXfermode::kSrc_Mode); | 103 paint.setPorterDuffXPFactory(SkXfermode::kSrc_Mode); |
104 | 104 |
105 SkRect localRect; | 105 SkRect localRect; |
106 if (subset) { | 106 if (subset) { |
107 localRect = SkRect::Make(*subset); | 107 localRect = SkRect::Make(*subset); |
108 localRect.fLeft *= sx; | 108 localRect.fLeft *= sx; |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
335 if (domainRect->fTop > domainRect->fBottom) { | 335 if (domainRect->fTop > domainRect->fBottom) { |
336 domainRect->fTop = domainRect->fBottom = SkScalarAve(domainRect->fTop, d
omainRect->fBottom); | 336 domainRect->fTop = domainRect->fBottom = SkScalarAve(domainRect->fTop, d
omainRect->fBottom); |
337 } | 337 } |
338 domainRect->fLeft /= texW; | 338 domainRect->fLeft /= texW; |
339 domainRect->fTop /= texH; | 339 domainRect->fTop /= texH; |
340 domainRect->fRight /= texW; | 340 domainRect->fRight /= texW; |
341 domainRect->fBottom /= texH; | 341 domainRect->fBottom /= texH; |
342 return kDomain_DomainMode; | 342 return kDomain_DomainMode; |
343 } | 343 } |
344 | 344 |
345 static const GrFragmentProcessor* create_fp_for_domain_and_filter( | 345 static sk_sp<GrFragmentProcessor> create_fp_for_domain_and_filter( |
346 GrTexture* texture, | 346 GrTexture* texture, |
347 const SkMatrix& textureMatrix, | 347 const SkMatrix& textureMatrix, |
348 DomainMode domainMode, | 348 DomainMode domainMode, |
349 const SkRect& domain, | 349 const SkRect& domain, |
350 const GrTextureParams::FilterMode* filte
rOrNullForBicubic) { | 350 const GrTextureParams::FilterMode* filte
rOrNullForBicubic) { |
351 SkASSERT(kTightCopy_DomainMode != domainMode); | 351 SkASSERT(kTightCopy_DomainMode != domainMode); |
352 if (filterOrNullForBicubic) { | 352 if (filterOrNullForBicubic) { |
353 if (kDomain_DomainMode == domainMode) { | 353 if (kDomain_DomainMode == domainMode) { |
354 return GrTextureDomainEffect::Create(texture, textureMatrix, domain, | 354 return GrTextureDomainEffect::Make(texture, textureMatrix, domain, |
355 GrTextureDomain::kClamp_Mode, | 355 GrTextureDomain::kClamp_Mode, |
356 *filterOrNullForBicubic); | 356 *filterOrNullForBicubic); |
357 } else { | 357 } else { |
358 GrTextureParams params(SkShader::kClamp_TileMode, *filterOrNullForBi
cubic); | 358 GrTextureParams params(SkShader::kClamp_TileMode, *filterOrNullForBi
cubic); |
359 return GrSimpleTextureEffect::Create(texture, textureMatrix, params)
; | 359 return GrSimpleTextureEffect::Make(texture, textureMatrix, params); |
360 } | 360 } |
361 } else { | 361 } else { |
362 if (kDomain_DomainMode == domainMode) { | 362 if (kDomain_DomainMode == domainMode) { |
363 return GrBicubicEffect::Create(texture, textureMatrix, domain); | 363 return GrBicubicEffect::Make(texture, textureMatrix, domain); |
364 } else { | 364 } else { |
365 static const SkShader::TileMode kClampClamp[] = | 365 static const SkShader::TileMode kClampClamp[] = |
366 { SkShader::kClamp_TileMode, SkShader::kClamp_TileMode }; | 366 { SkShader::kClamp_TileMode, SkShader::kClamp_TileMode }; |
367 return GrBicubicEffect::Create(texture, textureMatrix, kClampClamp); | 367 return GrBicubicEffect::Make(texture, textureMatrix, kClampClamp); |
368 } | 368 } |
369 } | 369 } |
370 } | 370 } |
371 | 371 |
372 const GrFragmentProcessor* GrTextureAdjuster::createFragmentProcessor( | 372 sk_sp<GrFragmentProcessor> GrTextureAdjuster::createFragmentProcessor( |
373 const SkMatrix& origTextureMatrix, | 373 const SkMatrix& origTextureMatrix, |
374 const SkRect& origConstraintRect, | 374 const SkRect& origConstraintRect, |
375 FilterConstraint filterConstraint, | 375 FilterConstraint filterConstraint, |
376 bool coordsLimitedToConstraintRect, | 376 bool coordsLimitedToConstraintRect, |
377 const GrTextureParams::FilterMode* filte
rOrNullForBicubic, | 377 const GrTextureParams::FilterMode* filte
rOrNullForBicubic, |
378 SkSourceGammaTreatment gammaTreatment) { | 378 SkSourceGammaTreatment gammaTreatment) { |
379 | 379 |
380 SkMatrix textureMatrix = origTextureMatrix; | 380 SkMatrix textureMatrix = origTextureMatrix; |
381 const SkIRect* contentArea = this->contentAreaOrNull(); | 381 const SkIRect* contentArea = this->contentAreaOrNull(); |
382 // Convert the constraintRect to be relative to the texture rather than the
content area so | 382 // Convert the constraintRect to be relative to the texture rather than the
content area so |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
460 return nullptr; | 460 return nullptr; |
461 } | 461 } |
462 | 462 |
463 if (copyKey.isValid()) { | 463 if (copyKey.isValid()) { |
464 fContext->textureProvider()->assignUniqueKeyToTexture(copyKey, result); | 464 fContext->textureProvider()->assignUniqueKeyToTexture(copyKey, result); |
465 this->didCacheCopy(copyKey); | 465 this->didCacheCopy(copyKey); |
466 } | 466 } |
467 return result; | 467 return result; |
468 } | 468 } |
469 | 469 |
470 const GrFragmentProcessor* GrTextureMaker::createFragmentProcessor( | 470 sk_sp<GrFragmentProcessor> GrTextureMaker::createFragmentProcessor( |
471 const SkMatrix& textureMatrix, | 471 const SkMatrix& textureMatrix, |
472 const SkRect& constraintRect, | 472 const SkRect& constraintRect, |
473 FilterConstraint filterConstraint, | 473 FilterConstraint filterConstraint, |
474 bool coordsLimitedToConstraintRect, | 474 bool coordsLimitedToConstraintRect, |
475 const GrTextureParams::FilterMode* filte
rOrNullForBicubic, | 475 const GrTextureParams::FilterMode* filte
rOrNullForBicubic, |
476 SkSourceGammaTreatment gammaTreatment) { | 476 SkSourceGammaTreatment gammaTreatment) { |
477 | 477 |
478 const GrTextureParams::FilterMode* fmForDetermineDomain = filterOrNullForBic
ubic; | 478 const GrTextureParams::FilterMode* fmForDetermineDomain = filterOrNullForBic
ubic; |
479 if (filterOrNullForBicubic && GrTextureParams::kMipMap_FilterMode == *filter
OrNullForBicubic && | 479 if (filterOrNullForBicubic && GrTextureParams::kMipMap_FilterMode == *filter
OrNullForBicubic && |
480 kYes_FilterConstraint == filterConstraint) { | 480 kYes_FilterConstraint == filterConstraint) { |
(...skipping 30 matching lines...) Expand all Loading... |
511 } | 511 } |
512 | 512 |
513 GrTexture* GrTextureMaker::generateTextureForParams(const CopyParams& copyParams
, bool willBeMipped, | 513 GrTexture* GrTextureMaker::generateTextureForParams(const CopyParams& copyParams
, bool willBeMipped, |
514 SkSourceGammaTreatment gamma
Treatment) { | 514 SkSourceGammaTreatment gamma
Treatment) { |
515 SkAutoTUnref<GrTexture> original(this->refOriginalTexture(willBeMipped, gamm
aTreatment)); | 515 SkAutoTUnref<GrTexture> original(this->refOriginalTexture(willBeMipped, gamm
aTreatment)); |
516 if (!original) { | 516 if (!original) { |
517 return nullptr; | 517 return nullptr; |
518 } | 518 } |
519 return copy_on_gpu(original, nullptr, copyParams); | 519 return copy_on_gpu(original, nullptr, copyParams); |
520 } | 520 } |
OLD | NEW |