| Index: src/core/SkBitmapController.cpp
|
| diff --git a/src/core/SkBitmapController.cpp b/src/core/SkBitmapController.cpp
|
| index 61c14dc7b8c7250e248d596d792ca5d58cd340c2..5430575515d38bda1f849fcd049df57234c8a21d 100644
|
| --- a/src/core/SkBitmapController.cpp
|
| +++ b/src/core/SkBitmapController.cpp
|
| @@ -160,8 +160,15 @@ bool SkDefaultBitmapControllerState::processMediumRequest(const SkBitmapProvider
|
| if (!fInvMatrix.decomposeScale(&invScaleSize, nullptr)) {
|
| return false;
|
| }
|
| +
|
| +#ifdef SK_SUPPORT_LEGACY_ANISOTROPIC_MIPMAPS
|
| SkScalar invScale = SkScalarSqrt(invScaleSize.width() * invScaleSize.height());
|
| -
|
| +#else
|
| + // Use the largest (non-inverse) scale, to ensure anisotropic consistency.
|
| + SkASSERT(invScaleSize.width() >= 0 && invScaleSize.height() >= 0);
|
| + const SkScalar invScale = SkTMin(invScaleSize.width(), invScaleSize.height());
|
| +#endif
|
| +
|
| if (invScale > SK_Scalar1) {
|
| fCurrMip.reset(SkMipMapCache::FindAndRef(provider.makeCacheDesc()));
|
| if (nullptr == fCurrMip.get()) {
|
| @@ -182,9 +189,9 @@ bool SkDefaultBitmapControllerState::processMediumRequest(const SkBitmapProvider
|
| SkScalar levelScale = SkScalarInvert(invScale);
|
| SkMipMap::Level level;
|
| if (fCurrMip->extractLevel(levelScale, &level)) {
|
| - SkScalar invScaleFixup = level.fScale;
|
| - fInvMatrix.postScale(invScaleFixup, invScaleFixup);
|
| -
|
| + const SkSize& invScaleFixup = level.fScale;
|
| + fInvMatrix.postScale(invScaleFixup.width(), invScaleFixup.height());
|
| +
|
| // todo: if we could wrap the fCurrMip in a pixelref, then we could just install
|
| // that here, and not need to explicitly track it ourselves.
|
| return fResultBitmap.installPixels(level.fPixmap);
|
|
|