diff options
author | Romain Guy <romainguy@google.com> | 2010-10-14 14:46:44 -0700 |
---|---|---|
committer | Romain Guy <romainguy@google.com> | 2010-10-14 14:49:34 -0700 |
commit | d2a1ff003b9b1212c9ab4b5f679b5b097720a359 (patch) | |
tree | 8ed98a94f0799861c4ebcb1799e7263fc8024000 | |
parent | ba7aad209f2b130a953467abd8cb41357fc20410 (diff) | |
download | frameworks_base-d2a1ff003b9b1212c9ab4b5f679b5b097720a359.zip frameworks_base-d2a1ff003b9b1212c9ab4b5f679b5b097720a359.tar.gz frameworks_base-d2a1ff003b9b1212c9ab4b5f679b5b097720a359.tar.bz2 |
Fix text rendering issue.
The local clip rect could be off by one pixel when a 3D transform
was applied to a text primitive. This would cause small rendering
glitches in Launcher in particular.
Change-Id: I1254f6a5838c26810cbe969b096679d40b8dd504
-rw-r--r-- | libs/hwui/OpenGLRenderer.cpp | 12 | ||||
-rw-r--r-- | libs/hwui/Snapshot.h | 1 |
2 files changed, 9 insertions, 4 deletions
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index 2876010..81fa1ea 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -388,7 +388,8 @@ bool OpenGLRenderer::createLayer(sp<Snapshot> snapshot, float left, float top, snapshot->invisible = true; } else { // TODO: Should take the mode into account - snapshot->invisible = snapshot->previous->invisible || alpha <= ALPHA_THRESHOLD; + snapshot->invisible = snapshot->previous->invisible || + (alpha <= ALPHA_THRESHOLD && fboLayer); } // Bail out if we won't draw in this snapshot @@ -551,7 +552,7 @@ void OpenGLRenderer::clearLayerRegions() { Rect* bounds = mLayers.itemAt(i); // Clear the framebuffer where the layer will draw - glScissor(bounds->left, mHeight - bounds->bottom, + glScissor(bounds->left, mSnapshot->height - bounds->bottom, bounds->getWidth(), bounds->getHeight()); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT); @@ -620,7 +621,12 @@ bool OpenGLRenderer::quickReject(float left, float top, float right, float botto Rect r(left, top, right, bottom); mSnapshot->transform->mapRect(r); - return !mSnapshot->clipRect->intersects(r); + r.snapToPixelBoundaries(); + + Rect clipRect(*mSnapshot->clipRect); + clipRect.snapToPixelBoundaries(); + + return !clipRect.intersects(r); } bool OpenGLRenderer::clipRect(float left, float top, float right, float bottom, SkRegion::Op op) { diff --git a/libs/hwui/Snapshot.h b/libs/hwui/Snapshot.h index 35cdf6f..2da1950 100644 --- a/libs/hwui/Snapshot.h +++ b/libs/hwui/Snapshot.h @@ -152,7 +152,6 @@ public: } if (clipped) { - clipRect->snapToPixelBoundaries(); flags |= Snapshot::kFlagClipSet | Snapshot::kFlagDirtyLocalClip; } |