Add support for paletted textures.
Change-Id: I36e6069bd58f78c609cdd1f3e4560c98f128f48e
diff --git a/libs/hwui/TextureCache.cpp b/libs/hwui/TextureCache.cpp
index adf6ee2..701df83 100644
--- a/libs/hwui/TextureCache.cpp
+++ b/libs/hwui/TextureCache.cpp
@@ -18,6 +18,8 @@
#include <GLES2/gl2.h>
+#include <SkCanvas.h>
+
#include <utils/threads.h>
#include "TextureCache.h"
@@ -192,8 +194,12 @@
// decoding happened
texture->blend = !bitmap->isOpaque();
break;
+ case SkBitmap::kIndex8_Config:
+ uploadPalettedTexture(resize, bitmap, texture->width, texture->height);
+ texture->blend = false;
+ break;
default:
- LOGW("Unsupported bitmap config");
+ LOGW("Unsupported bitmap config: %d", bitmap->getConfig());
break;
}
@@ -204,6 +210,20 @@
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
}
+void TextureCache::uploadPalettedTexture(bool resize, SkBitmap* bitmap,
+ uint32_t width, uint32_t height) {
+ SkBitmap rgbaBitmap;
+ rgbaBitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height);
+ rgbaBitmap.allocPixels();
+ rgbaBitmap.eraseColor(0);
+
+ SkCanvas canvas(rgbaBitmap);
+ canvas.drawBitmap(*bitmap, 0.0f, 0.0f, NULL);
+
+ uploadToTexture(resize, GL_RGBA, rgbaBitmap.rowBytesAsPixels(), height,
+ GL_UNSIGNED_BYTE, rgbaBitmap.getPixels());
+}
+
void TextureCache::uploadToTexture(bool resize, GLenum format, GLsizei width, GLsizei height,
GLenum type, const GLvoid * data) {
if (resize) {
diff --git a/libs/hwui/TextureCache.h b/libs/hwui/TextureCache.h
index 7cf66d9..34c5455 100644
--- a/libs/hwui/TextureCache.h
+++ b/libs/hwui/TextureCache.h
@@ -79,6 +79,7 @@
*/
void generateTexture(SkBitmap* bitmap, Texture* texture, bool regenerate = false);
+ void uploadPalettedTexture(bool resize, SkBitmap* bitmap, uint32_t width, uint32_t height);
void uploadToTexture(bool resize, GLenum format, GLsizei width, GLsizei height,
GLenum type, const GLvoid * data);