| 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 | 
|---|