summaryrefslogtreecommitdiffstats
path: root/libs/hwui
diff options
context:
space:
mode:
authorRomain Guy <romainguy@google.com>2013-07-24 11:49:33 -0700
committerRomain Guy <romainguy@google.com>2013-07-24 11:49:33 -0700
commit6cad75744ed3b81cf2c96f545368067b62c726ec (patch)
tree42028d937d8071bbd1e58029da66a20e39346b1c /libs/hwui
parent4a8baef3f56042ab4592db030c61af0a4c632d15 (diff)
downloadframeworks_base-6cad75744ed3b81cf2c96f545368067b62c726ec.zip
frameworks_base-6cad75744ed3b81cf2c96f545368067b62c726ec.tar.gz
frameworks_base-6cad75744ed3b81cf2c96f545368067b62c726ec.tar.bz2
Fix 9patches' limitation of 32 empty quads
The 9patch format allows to define more empty quads than this, remove the use of a single int to index empty quads and replace it with a lookup in the 9patch resource data structure. Change-Id: I148ee5d9e0c96822b534a344e15c9d88078db7c2
Diffstat (limited to 'libs/hwui')
-rw-r--r--libs/hwui/Extensions.cpp2
-rw-r--r--libs/hwui/Patch.cpp19
-rw-r--r--libs/hwui/Patch.h2
3 files changed, 10 insertions, 13 deletions
diff --git a/libs/hwui/Extensions.cpp b/libs/hwui/Extensions.cpp
index 218c18e..84e7e65 100644
--- a/libs/hwui/Extensions.cpp
+++ b/libs/hwui/Extensions.cpp
@@ -86,7 +86,7 @@ Extensions::Extensions(): Singleton<Extensions>() {
// or more digits. The release number and vendor specific information are
// optional."
- if (sscanf(version, "OpenGL ES %d.%d", &mVersionMajor, &mVersionMinor) !=2) {
+ if (sscanf(version, "OpenGL ES %d.%d", &mVersionMajor, &mVersionMinor) != 2) {
// If we cannot parse the version number, assume OpenGL ES 2.0
mVersionMajor = 2;
mVersionMinor = 0;
diff --git a/libs/hwui/Patch.cpp b/libs/hwui/Patch.cpp
index 7656f85..9b023f9 100644
--- a/libs/hwui/Patch.cpp
+++ b/libs/hwui/Patch.cpp
@@ -56,17 +56,14 @@ TextureVertex* Patch::createMesh(const float bitmapWidth, const float bitmapHeig
float width, float height, const UvMapper& mapper, const Res_png_9patch* patch) {
if (vertices) return vertices;
- const uint32_t* colors = &patch->colors[0];
- const int8_t numColors = patch->numColors;
-
- mColorKey = 0;
int8_t emptyQuads = 0;
+ mColors = patch->colors;
+ const int8_t numColors = patch->numColors;
if (uint8_t(numColors) < sizeof(uint32_t) * 4) {
for (int8_t i = 0; i < numColors; i++) {
- if (colors[i] == 0x0) {
+ if (mColors[i] == 0x0) {
emptyQuads++;
- mColorKey |= 0x1 << i;
}
}
}
@@ -221,11 +218,11 @@ void Patch::generateQuad(TextureVertex*& vertex, float x1, float y1, float x2, f
if (y2 < 0.0f) y2 = 0.0f;
// Skip degenerate and transparent (empty) quads
- if (((mColorKey >> oldQuadCount) & 0x1) || x1 >= x2 || y1 >= y2) {
+ if ((mColors[oldQuadCount] == 0) || x1 >= x2 || y1 >= y2) {
#if DEBUG_PATCHES_EMPTY_VERTICES
PATCH_LOGD(" quad %d (empty)", oldQuadCount);
- PATCH_LOGD(" left, top = %.2f, %.2f\t\tu1, v1 = %.4f, %.4f", x1, y1, u1, v1);
- PATCH_LOGD(" right, bottom = %.2f, %.2f\t\tu2, v2 = %.4f, %.4f", x2, y2, u2, v2);
+ PATCH_LOGD(" left, top = %.2f, %.2f\t\tu1, v1 = %.8f, %.8f", x1, y1, u1, v1);
+ PATCH_LOGD(" right, bottom = %.2f, %.2f\t\tu2, v2 = %.8f, %.8f", x2, y2, u2, v2);
#endif
return;
}
@@ -248,8 +245,8 @@ void Patch::generateQuad(TextureVertex*& vertex, float x1, float y1, float x2, f
#if DEBUG_PATCHES_VERTICES
PATCH_LOGD(" quad %d", oldQuadCount);
- PATCH_LOGD(" left, top = %.2f, %.2f\t\tu1, v1 = %.4f, %.4f", x1, y1, u1, v1);
- PATCH_LOGD(" right, bottom = %.2f, %.2f\t\tu2, v2 = %.4f, %.4f", x2, y2, u2, v2);
+ PATCH_LOGD(" left, top = %.2f, %.2f\t\tu1, v1 = %.8f, %.8f", x1, y1, u1, v1);
+ PATCH_LOGD(" right, bottom = %.2f, %.2f\t\tu2, v2 = %.8f, %.8f", x2, y2, u2, v2);
#endif
}
diff --git a/libs/hwui/Patch.h b/libs/hwui/Patch.h
index 246ba66..763a785 100644
--- a/libs/hwui/Patch.h
+++ b/libs/hwui/Patch.h
@@ -66,7 +66,7 @@ private:
void generateQuad(TextureVertex*& vertex, float x1, float y1, float x2, float y2,
float u1, float v1, float u2, float v2, uint32_t& quadCount);
- uint32_t mColorKey;
+ uint32_t* mColors;
UvMapper mUvMapper;
}; // struct Patch