Loading libs/hwui/Texture.h +4 −0 Original line number Original line Diff line number Diff line Loading @@ -30,6 +30,10 @@ struct Texture { * Name of the texture. * Name of the texture. */ */ GLuint id; GLuint id; /** * Generation of the backing bitmap, */ uint32_t generation; /** /** * Indicates whether the texture requires blending. * Indicates whether the texture requires blending. */ */ Loading libs/hwui/TextureCache.cpp +10 −5 Original line number Original line Diff line number Diff line Loading @@ -43,6 +43,8 @@ Texture* TextureCache::get(SkBitmap* bitmap) { texture = new Texture; texture = new Texture; generateTexture(bitmap, texture); generateTexture(bitmap, texture); mCache.put(bitmap, texture); mCache.put(bitmap, texture); } else if (bitmap->getGenerationID() != texture->generation) { generateTexture(bitmap, texture, true); } } return texture; return texture; } } Loading @@ -55,11 +57,14 @@ void TextureCache::clear() { mCache.clear(); mCache.clear(); } } void TextureCache::generateTexture(SkBitmap* bitmap, Texture* texture) { void TextureCache::generateTexture(SkBitmap* bitmap, Texture* texture, bool regenerate) { if (!regenerate) { texture->width = bitmap->width(); texture->width = bitmap->width(); texture->height = bitmap->height(); texture->height = bitmap->height(); glGenTextures(1, &texture->id); glGenTextures(1, &texture->id); } glBindTexture(GL_TEXTURE_2D, texture->id); glBindTexture(GL_TEXTURE_2D, texture->id); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); Loading @@ -80,7 +85,7 @@ void TextureCache::generateTexture(SkBitmap* bitmap, Texture* texture) { break; break; } } return texture; glBindTexture(GL_TEXTURE_2D, 0); } } }; // namespace uirenderer }; // namespace uirenderer Loading libs/hwui/TextureCache.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -37,7 +37,7 @@ public: void clear(); void clear(); private: private: void generateTexture(SkBitmap* bitmap, Texture* texture); void generateTexture(SkBitmap* bitmap, Texture* texture, bool regenerate = false); GenerationCache<SkBitmap, Texture> mCache; GenerationCache<SkBitmap, Texture> mCache; }; // class TextureCache }; // class TextureCache Loading Loading
libs/hwui/Texture.h +4 −0 Original line number Original line Diff line number Diff line Loading @@ -30,6 +30,10 @@ struct Texture { * Name of the texture. * Name of the texture. */ */ GLuint id; GLuint id; /** * Generation of the backing bitmap, */ uint32_t generation; /** /** * Indicates whether the texture requires blending. * Indicates whether the texture requires blending. */ */ Loading
libs/hwui/TextureCache.cpp +10 −5 Original line number Original line Diff line number Diff line Loading @@ -43,6 +43,8 @@ Texture* TextureCache::get(SkBitmap* bitmap) { texture = new Texture; texture = new Texture; generateTexture(bitmap, texture); generateTexture(bitmap, texture); mCache.put(bitmap, texture); mCache.put(bitmap, texture); } else if (bitmap->getGenerationID() != texture->generation) { generateTexture(bitmap, texture, true); } } return texture; return texture; } } Loading @@ -55,11 +57,14 @@ void TextureCache::clear() { mCache.clear(); mCache.clear(); } } void TextureCache::generateTexture(SkBitmap* bitmap, Texture* texture) { void TextureCache::generateTexture(SkBitmap* bitmap, Texture* texture, bool regenerate) { if (!regenerate) { texture->width = bitmap->width(); texture->width = bitmap->width(); texture->height = bitmap->height(); texture->height = bitmap->height(); glGenTextures(1, &texture->id); glGenTextures(1, &texture->id); } glBindTexture(GL_TEXTURE_2D, texture->id); glBindTexture(GL_TEXTURE_2D, texture->id); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); Loading @@ -80,7 +85,7 @@ void TextureCache::generateTexture(SkBitmap* bitmap, Texture* texture) { break; break; } } return texture; glBindTexture(GL_TEXTURE_2D, 0); } } }; // namespace uirenderer }; // namespace uirenderer Loading
libs/hwui/TextureCache.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -37,7 +37,7 @@ public: void clear(); void clear(); private: private: void generateTexture(SkBitmap* bitmap, Texture* texture); void generateTexture(SkBitmap* bitmap, Texture* texture, bool regenerate = false); GenerationCache<SkBitmap, Texture> mCache; GenerationCache<SkBitmap, Texture> mCache; }; // class TextureCache }; // class TextureCache Loading