diff options
| author | 2010-07-09 13:52:56 -0700 | |
|---|---|---|
| committer | 2010-07-09 13:52:56 -0700 | |
| commit | fb5e23c327cd5f8f93d1eaa7c10f34d6fd3efb6c (patch) | |
| tree | 8637af6593869b9e3f31a8b35c4388016eb690ac /libs/hwui/OpenGLRenderer.cpp | |
| parent | 3465d5f532b65b0e50d21f5b23bc3badc73248ba (diff) | |
Refactoring to move vertex computing to the Patch class.
This change is mostly cleanup to keep less code in OpenGLRenderer.
Change-Id: I954375143b2943829457ab470423729b60b844f5
Diffstat (limited to 'libs/hwui/OpenGLRenderer.cpp')
| -rw-r--r-- | libs/hwui/OpenGLRenderer.cpp | 93 |
1 files changed, 2 insertions, 91 deletions
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index 4423b7e566b8..e333060aa7a4 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -463,71 +463,9 @@ void OpenGLRenderer::drawPatch(SkBitmap* bitmap, Res_png_9patch* patch, SkXfermode::Mode mode; getAlphaAndMode(paint, &alpha, &mode); - const uint32_t width = patch->numXDivs; - const uint32_t height = patch->numYDivs; - Patch* mesh = mPatchCache.get(patch); - - const uint32_t xStretchCount = (width + 1) >> 1; - const uint32_t yStretchCount = (height + 1) >> 1; - - const int32_t* xDivs = &patch->xDivs[0]; - const int32_t* yDivs = &patch->yDivs[0]; - - float xStretch = 0; - float yStretch = 0; - float xStretchTex = 0; - float yStretchTex = 0; - - const float meshWidth = right - left; - - const float bitmapWidth = float(bitmap->width()); - const float bitmapHeight = float(bitmap->height()); - - if (xStretchCount > 0) { - uint32_t stretchSize = 0; - for (uint32_t i = 1; i < width; i += 2) { - stretchSize += xDivs[i] - xDivs[i - 1]; - } - xStretchTex = (stretchSize / bitmapWidth) / xStretchCount; - const float fixed = bitmapWidth - stretchSize; - xStretch = (right - left - fixed) / xStretchCount; - } - - if (yStretchCount > 0) { - uint32_t stretchSize = 0; - for (uint32_t i = 1; i < height; i += 2) { - stretchSize += yDivs[i] - yDivs[i - 1]; - } - yStretchTex = (stretchSize / bitmapHeight) / yStretchCount; - const float fixed = bitmapHeight - stretchSize; - yStretch = (bottom - top - fixed) / yStretchCount; - } - - float vy = 0.0f; - float ty = 0.0f; - TextureVertex* vertex = mesh->vertices; - - generateVertices(vertex, 0.0f, 0.0f, xDivs, width, xStretch, xStretchTex, - meshWidth, bitmapWidth); - vertex += width + 2; - - for (uint32_t y = 0; y < height; y++) { - if (y & 1) { - vy += yStretch; - ty += yStretchTex; - } else { - const float step = float(yDivs[y]); - vy += step; - ty += step / bitmapHeight; - } - generateVertices(vertex, vy, ty, xDivs, width, xStretch, xStretchTex, - meshWidth, bitmapWidth); - vertex += width + 2; - } - - generateVertices(vertex, bottom - top, 1.0f, xDivs, width, xStretch, xStretchTex, - meshWidth, bitmapWidth); + mesh->updateVertices(bitmap, left, top, right, bottom, + &patch->xDivs[0], &patch->yDivs[0], patch->numXDivs, patch->numYDivs); // Specify right and bottom as +1.0f from left/top to prevent scaling since the // patch mesh already defines the final size @@ -536,33 +474,6 @@ void OpenGLRenderer::drawPatch(SkBitmap* bitmap, Res_png_9patch* patch, mesh->indicesCount); } -void OpenGLRenderer::generateVertices(TextureVertex* vertex, float y, float v, - const int32_t xDivs[], uint32_t xCount, float xStretch, float xStretchTex, - float width, float widthTex) { - float vx = 0.0f; - float tx = 0.0f; - - TextureVertex::set(vertex, vx, y, tx, v); - vertex++; - - for (uint32_t x = 0; x < xCount; x++) { - if (x & 1) { - vx += xStretch; - tx += xStretchTex; - } else { - const float step = float(xDivs[x]); - vx += step; - tx += step / widthTex; - } - - TextureVertex::set(vertex, vx, y, tx, v); - vertex++; - } - - TextureVertex::set(vertex, width, y, 1.0f, v); - vertex++; -} - void OpenGLRenderer::drawColor(int color, SkXfermode::Mode mode) { const Rect& clip = mSnapshot->clipRect; drawColorRect(clip.left, clip.top, clip.right, clip.bottom, color, mode); |