Chromium Code Reviews| Index: src/gpu/GrImageIDTextureAdjuster.cpp |
| diff --git a/src/gpu/GrImageIDTextureAdjuster.cpp b/src/gpu/GrImageIDTextureAdjuster.cpp |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..2b63d5cc2de869eb1e691e125be319c66f64ae87 |
| --- /dev/null |
| +++ b/src/gpu/GrImageIDTextureAdjuster.cpp |
| @@ -0,0 +1,54 @@ |
| +/* |
| + * Copyright 2015 Google Inc. |
| + * |
| + * Use of this source code is governed by a BSD-style license that can be |
| + * found in the LICENSE file. |
| + */ |
| + |
| +#include "GrImageIDTextureAdjuster.h" |
| + |
| +#include "SkBitmap.h" |
| +#include "SkGrPriv.h" |
| +#include "SkImage_Base.h" |
| + |
| + |
| +GrBitmapTextureAdjuster::GrBitmapTextureAdjuster(const SkBitmap* bmp) |
| + : INHERITED(bmp->getTexture(), SkIRect::MakeWH(bmp->width(), bmp->height())) |
| + , fBmp(bmp) {} |
| + |
| +void GrBitmapTextureAdjuster::makeCopyKey(const CopyParams& params, GrUniqueKey* copyKey) { |
| + if (fBmp->isVolatile()) { |
| + return; |
| + } |
| + // The content area must represent the whole bitmap. Texture-backed bitmaps don't support |
| + // extractSubset(). Therefore, either the bitmap and the texture are the same size or the |
| + // content's dimensions are the bitmap's dimensions which is pinned to the upper left |
| + // of the texture. |
| + GrUniqueKey baseKey; |
| + GrMakeKeyFromImageID(&baseKey, fBmp->getGenerationID(), |
|
robertphillips
2015/11/05 20:13:24
align ?
bsalomon
2015/11/06 15:24:25
Done.
|
| + SkIRect::MakeWH(fBmp->width(), fBmp->height())); |
| + MakeCopyKeyFromOrigKey(baseKey, params, copyKey); |
| +} |
| + |
| +void GrBitmapTextureAdjuster::didCacheCopy(const GrUniqueKey& copyKey) { |
| + GrInstallBitmapUniqueKeyInvalidator(copyKey, fBmp->pixelRef()); |
| +} |
| + |
| +////////////////////////////////////////////////////////////////////////////// |
| + |
| +GrImageTextureAdjuster::GrImageTextureAdjuster(const SkImage_Base* img) |
| + : INHERITED(img->peekTexture(), SkIRect::MakeWH(img->width(), img->height())) |
| + , fImageBase(img) {} |
| + |
| +void GrImageTextureAdjuster::makeCopyKey(const CopyParams& params, GrUniqueKey* copyKey) { |
| + // By construction this texture adjuster always represents an entire SkImage, so use the |
| + // image's width and height for the key's rectangle. |
| + GrUniqueKey baseKey; |
| + GrMakeKeyFromImageID(&baseKey, fImageBase->uniqueID(), |
| + SkIRect::MakeWH(fImageBase->width(), fImageBase->height())); |
| + MakeCopyKeyFromOrigKey(baseKey, params, copyKey); |
| +} |
| + |
| +void GrImageTextureAdjuster::didCacheCopy(const GrUniqueKey& copyKey) { |
| + // We don't currently have a mechanism for notifications on Images! |
| +} |