sk_sp<GrTextureProxy> GrBitmapTextureMaker::refOriginalTextureProxy(bool willBeMipped, SkColorSpace* dstColorSpace, AllowedTexGenType onlyIfFast) { if (AllowedTexGenType::kCheap == onlyIfFast) { return nullptr; } sk_sp<GrTextureProxy> proxy; if (fOriginalKey.isValid()) { proxy = this->context()->resourceProvider()->findProxyByUniqueKey(fOriginalKey); if (proxy) { return proxy; } } if (willBeMipped) { proxy = GrGenerateMipMapsAndUploadToTextureProxy(this->context(), fBitmap, dstColorSpace); } if (!proxy) { proxy = GrUploadBitmapToTextureProxy(this->context()->resourceProvider(), fBitmap, dstColorSpace); } if (proxy && fOriginalKey.isValid()) { this->context()->resourceProvider()->assignUniqueKeyToProxy(fOriginalKey, proxy.get()); // MDB TODO (caching): this has to play nice with the GrSurfaceProxy's caching GrInstallBitmapUniqueKeyInvalidator(fOriginalKey, fBitmap.pixelRef()); } return proxy; }
void GrBitmapTextureAdjuster::didCacheCopy(const GrUniqueKey& copyKey) { GrInstallBitmapUniqueKeyInvalidator(copyKey, fBmp->pixelRef()); }