summaryrefslogtreecommitdiffstats
path: root/libs
diff options
context:
space:
mode:
authorRomain Guy <romainguy@google.com>2012-10-16 11:25:06 -0700
committerRomain Guy <romainguy@google.com>2012-10-16 11:25:06 -0700
commitd43b22da291fd08017fac627561091a633c85807 (patch)
treef03a0488697614a39366f81f22878339e1096f16 /libs
parent4682cf02b42f75876f14f512e874c3e798b09c9c (diff)
downloadframeworks_base-d43b22da291fd08017fac627561091a633c85807.zip
frameworks_base-d43b22da291fd08017fac627561091a633c85807.tar.gz
frameworks_base-d43b22da291fd08017fac627561091a633c85807.tar.bz2
Always use the correct pixel store size
Bug #7357394 When a bitmap is reused it may change configuration which can lead to a different pixel store alignment. Our current texture cache implementation assumes this never happens and keeps the old alignment which can lead to distorted texture (if the bitmap goes from ARGB8888 to RGB565 for instance.) Change-Id: Ic57acf2403411ae4d0924e92f221298350612617
Diffstat (limited to 'libs')
-rw-r--r--libs/hwui/TextureCache.cpp10
1 files changed, 4 insertions, 6 deletions
diff --git a/libs/hwui/TextureCache.cpp b/libs/hwui/TextureCache.cpp
index 9fb61e4..4d16bb4 100644
--- a/libs/hwui/TextureCache.cpp
+++ b/libs/hwui/TextureCache.cpp
@@ -228,25 +228,22 @@ void TextureCache::generateTexture(SkBitmap* bitmap, Texture* texture, bool rege
texture->height = bitmap->height();
glBindTexture(GL_TEXTURE_2D, texture->id);
- if (!regenerate) {
- glPixelStorei(GL_UNPACK_ALIGNMENT, bitmap->bytesPerPixel());
- }
switch (bitmap->getConfig()) {
case SkBitmap::kA8_Config:
- if (!regenerate) {
- glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
- }
+ glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
uploadToTexture(resize, GL_ALPHA, bitmap->rowBytesAsPixels(), texture->height,
GL_UNSIGNED_BYTE, bitmap->getPixels());
texture->blend = true;
break;
case SkBitmap::kRGB_565_Config:
+ glPixelStorei(GL_UNPACK_ALIGNMENT, bitmap->bytesPerPixel());
uploadToTexture(resize, GL_RGB, bitmap->rowBytesAsPixels(), texture->height,
GL_UNSIGNED_SHORT_5_6_5, bitmap->getPixels());
texture->blend = false;
break;
case SkBitmap::kARGB_8888_Config:
+ glPixelStorei(GL_UNPACK_ALIGNMENT, bitmap->bytesPerPixel());
uploadToTexture(resize, GL_RGBA, bitmap->rowBytesAsPixels(), texture->height,
GL_UNSIGNED_BYTE, bitmap->getPixels());
// Do this after calling getPixels() to make sure Skia's deferred
@@ -255,6 +252,7 @@ void TextureCache::generateTexture(SkBitmap* bitmap, Texture* texture, bool rege
break;
case SkBitmap::kARGB_4444_Config:
case SkBitmap::kIndex8_Config:
+ glPixelStorei(GL_UNPACK_ALIGNMENT, bitmap->bytesPerPixel());
uploadLoFiTexture(resize, bitmap, texture->width, texture->height);
texture->blend = !bitmap->isOpaque();
break;