diff options
author | Chris Craik <ccraik@google.com> | 2015-07-17 23:59:14 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-07-17 23:59:17 +0000 |
commit | 0bb5c26bcea4b171583e57134b9717c77fbdcb14 (patch) | |
tree | f30bfaaa722b76dff1434d4e82416f375cfb1f1e /libs | |
parent | 57ee4b87fee76d9f85d28a09e370a92b5839a8dd (diff) | |
parent | 6ad690e16f8e139bfd29a035b52ab616d813a74b (diff) | |
download | frameworks_base-0bb5c26bcea4b171583e57134b9717c77fbdcb14.zip frameworks_base-0bb5c26bcea4b171583e57134b9717c77fbdcb14.tar.gz frameworks_base-0bb5c26bcea4b171583e57134b9717c77fbdcb14.tar.bz2 |
Merge "Fix AssetAtlas usage in BitmapShaders" into mnc-dev
Diffstat (limited to 'libs')
-rw-r--r-- | libs/hwui/SkiaShader.cpp | 8 | ||||
-rw-r--r-- | libs/hwui/TextureCache.cpp | 10 | ||||
-rw-r--r-- | libs/hwui/TextureCache.h | 23 |
3 files changed, 31 insertions, 10 deletions
diff --git a/libs/hwui/SkiaShader.cpp b/libs/hwui/SkiaShader.cpp index a2aa2d1..81d8516 100644 --- a/libs/hwui/SkiaShader.cpp +++ b/libs/hwui/SkiaShader.cpp @@ -203,7 +203,13 @@ bool tryStoreBitmap(Caches& caches, const SkShader& shader, const Matrix4& model return false; } - outData->bitmapTexture = caches.textureCache.get(&bitmap); + /* + * Bypass the AssetAtlas, since those textures: + * 1) require UV mapping, which isn't implemented in matrix computation below + * 2) can't handle REPEAT simply + * 3) are safe to upload here (outside of sync stage), since they're static + */ + outData->bitmapTexture = caches.textureCache.getAndBypassAtlas(&bitmap); if (!outData->bitmapTexture) return false; outData->bitmapSampler = (*textureUnit)++; diff --git a/libs/hwui/TextureCache.cpp b/libs/hwui/TextureCache.cpp index fe1b7fd..2a90087 100644 --- a/libs/hwui/TextureCache.cpp +++ b/libs/hwui/TextureCache.cpp @@ -140,8 +140,8 @@ bool TextureCache::canMakeTextureFromBitmap(const SkBitmap* bitmap) { // Returns a prepared Texture* that either is already in the cache or can fit // in the cache (and is thus added to the cache) -Texture* TextureCache::getCachedTexture(const SkBitmap* bitmap) { - if (CC_LIKELY(mAssetAtlas)) { +Texture* TextureCache::getCachedTexture(const SkBitmap* bitmap, AtlasUsageType atlasUsageType) { + if (CC_LIKELY(mAssetAtlas != nullptr) && atlasUsageType == AtlasUsageType::Use) { AssetAtlas::Entry* entry = mAssetAtlas->getEntry(bitmap); if (CC_UNLIKELY(entry)) { return entry->texture; @@ -190,15 +190,15 @@ Texture* TextureCache::getCachedTexture(const SkBitmap* bitmap) { } bool TextureCache::prefetchAndMarkInUse(const SkBitmap* bitmap) { - Texture* texture = getCachedTexture(bitmap); + Texture* texture = getCachedTexture(bitmap, AtlasUsageType::Use); if (texture) { texture->isInUse = true; } return texture; } -Texture* TextureCache::get(const SkBitmap* bitmap) { - Texture* texture = getCachedTexture(bitmap); +Texture* TextureCache::get(const SkBitmap* bitmap, AtlasUsageType atlasUsageType) { + Texture* texture = getCachedTexture(bitmap, atlasUsageType); if (!texture) { if (!canMakeTextureFromBitmap(bitmap)) { diff --git a/libs/hwui/TextureCache.h b/libs/hwui/TextureCache.h index e7fc990..83c6e91 100644 --- a/libs/hwui/TextureCache.h +++ b/libs/hwui/TextureCache.h @@ -76,10 +76,20 @@ public: bool prefetchAndMarkInUse(const SkBitmap* bitmap); /** - * Returns the texture associated with the specified bitmap. If the texture - * cannot be found in the cache, a new texture is generated. + * Returns the texture associated with the specified bitmap from either within the cache, or + * the AssetAtlas. If the texture cannot be found in the cache, a new texture is generated. */ - Texture* get(const SkBitmap* bitmap); + Texture* get(const SkBitmap* bitmap) { + return get(bitmap, AtlasUsageType::Use); + } + + /** + * Returns the texture associated with the specified bitmap. If the texture cannot be found in + * the cache, a new texture is generated, even if it resides in the AssetAtlas. + */ + Texture* getAndBypassAtlas(const SkBitmap* bitmap) { + return get(bitmap, AtlasUsageType::Bypass); + } /** * Removes the texture associated with the specified pixelRef. This is meant @@ -123,10 +133,15 @@ public: void setAssetAtlas(AssetAtlas* assetAtlas); private: + enum class AtlasUsageType { + Use, + Bypass, + }; bool canMakeTextureFromBitmap(const SkBitmap* bitmap); - Texture* getCachedTexture(const SkBitmap* bitmap); + Texture* get(const SkBitmap* bitmap, AtlasUsageType atlasUsageType); + Texture* getCachedTexture(const SkBitmap* bitmap, AtlasUsageType atlasUsageType); /** * Generates the texture from a bitmap into the specified texture structure. |