diff options
author | Romain Guy <romainguy@google.com> | 2013-07-24 11:49:33 -0700 |
---|---|---|
committer | Romain Guy <romainguy@google.com> | 2013-07-24 11:49:33 -0700 |
commit | 6cad75744ed3b81cf2c96f545368067b62c726ec (patch) | |
tree | 42028d937d8071bbd1e58029da66a20e39346b1c /libs/hwui | |
parent | 4a8baef3f56042ab4592db030c61af0a4c632d15 (diff) | |
download | frameworks_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.cpp | 2 | ||||
-rw-r--r-- | libs/hwui/Patch.cpp | 19 | ||||
-rw-r--r-- | libs/hwui/Patch.h | 2 |
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 |