From fe8809471a40cac8acc984adfa51c39e13e83947 Mon Sep 17 00:00:00 2001 From: Romain Guy Date: Wed, 30 Jun 2010 16:05:32 -0700 Subject: [PATCH] Remove unnecessary return and add bitmap generation ID tracking. Change-Id: Icf5e0635e789f5ea53268c22fad51cf733b5b1a6 --- libs/hwui/Texture.h | 4 ++++ libs/hwui/TextureCache.cpp | 15 ++++++++++----- libs/hwui/TextureCache.h | 2 +- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/libs/hwui/Texture.h b/libs/hwui/Texture.h index b3b17cae45e29..6802c59f973f9 100644 --- a/libs/hwui/Texture.h +++ b/libs/hwui/Texture.h @@ -30,6 +30,10 @@ struct Texture { * Name of the texture. */ GLuint id; + /** + * Generation of the backing bitmap, + */ + uint32_t generation; /** * Indicates whether the texture requires blending. */ diff --git a/libs/hwui/TextureCache.cpp b/libs/hwui/TextureCache.cpp index fd12a3c19db00..c3b1463061242 100644 --- a/libs/hwui/TextureCache.cpp +++ b/libs/hwui/TextureCache.cpp @@ -43,6 +43,8 @@ Texture* TextureCache::get(SkBitmap* bitmap) { texture = new Texture; generateTexture(bitmap, texture); mCache.put(bitmap, texture); + } else if (bitmap->getGenerationID() != texture->generation) { + generateTexture(bitmap, texture, true); } return texture; } @@ -55,11 +57,14 @@ void TextureCache::clear() { mCache.clear(); } -void TextureCache::generateTexture(SkBitmap* bitmap, Texture* texture) { - texture->width = bitmap->width(); - texture->height = bitmap->height(); +void TextureCache::generateTexture(SkBitmap* bitmap, Texture* texture, bool regenerate) { + if (!regenerate) { + texture->width = bitmap->width(); + texture->height = bitmap->height(); + + glGenTextures(1, &texture->id); + } - glGenTextures(1, &texture->id); glBindTexture(GL_TEXTURE_2D, texture->id); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); @@ -80,7 +85,7 @@ void TextureCache::generateTexture(SkBitmap* bitmap, Texture* texture) { break; } - return texture; + glBindTexture(GL_TEXTURE_2D, 0); } }; // namespace uirenderer diff --git a/libs/hwui/TextureCache.h b/libs/hwui/TextureCache.h index 7f9536689efe1..bf680616c4f01 100644 --- a/libs/hwui/TextureCache.h +++ b/libs/hwui/TextureCache.h @@ -37,7 +37,7 @@ public: void clear(); private: - void generateTexture(SkBitmap* bitmap, Texture* texture); + void generateTexture(SkBitmap* bitmap, Texture* texture, bool regenerate = false); GenerationCache mCache; }; // class TextureCache