summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRomain Guy <romainguy@google.com>2010-11-03 20:03:42 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-11-03 20:03:42 -0700
commit617d74ac484ae1b8d9593627f1325ee079d7f223 (patch)
tree44e77924ca5ae58bdf31652f1927af08c0955523
parent0c24a5514c1ff143a223720a090b19a86a75945f (diff)
parente45362cad94c014d8b3765cb102db0f8c0d92500 (diff)
downloadframeworks_base-617d74ac484ae1b8d9593627f1325ee079d7f223.zip
frameworks_base-617d74ac484ae1b8d9593627f1325ee079d7f223.tar.gz
frameworks_base-617d74ac484ae1b8d9593627f1325ee079d7f223.tar.bz2
Merge "Fix rendering bug with saveLayerAlpha/drawColor."
-rw-r--r--libs/hwui/OpenGLRenderer.cpp36
1 files changed, 19 insertions, 17 deletions
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 855a4e0..09e01f6 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -260,25 +260,25 @@ int OpenGLRenderer::saveLayer(float left, float top, float right, float bottom,
const GLuint previousFbo = mSnapshot->fbo;
const int count = saveSnapshot(flags);
- int alpha = 255;
- SkXfermode::Mode mode;
-
- if (p) {
- alpha = p->getAlpha();
- if (!mCaches.extensions.hasFramebufferFetch()) {
- const bool isMode = SkXfermode::IsMode(p->getXfermode(), &mode);
- if (!isMode) {
- // Assume SRC_OVER
- mode = SkXfermode::kSrcOver_Mode;
+ if (!mSnapshot->invisible) {
+ int alpha = 255;
+ SkXfermode::Mode mode;
+
+ if (p) {
+ alpha = p->getAlpha();
+ if (!mCaches.extensions.hasFramebufferFetch()) {
+ const bool isMode = SkXfermode::IsMode(p->getXfermode(), &mode);
+ if (!isMode) {
+ // Assume SRC_OVER
+ mode = SkXfermode::kSrcOver_Mode;
+ }
+ } else {
+ mode = getXfermode(p->getXfermode());
}
} else {
- mode = getXfermode(p->getXfermode());
+ mode = SkXfermode::kSrcOver_Mode;
}
- } else {
- mode = SkXfermode::kSrcOver_Mode;
- }
- if (!mSnapshot->previous->invisible) {
createLayer(mSnapshot, left, top, right, bottom, alpha, mode, flags, previousFbo);
}
@@ -379,8 +379,7 @@ bool OpenGLRenderer::createLayer(sp<Snapshot> snapshot, float left, float top,
bounds.getHeight() > mCaches.maxTextureSize) {
snapshot->invisible = true;
} else {
- snapshot->invisible = snapshot->previous->invisible ||
- (alpha <= ALPHA_THRESHOLD && fboLayer);
+ snapshot->invisible = snapshot->invisible || (alpha <= ALPHA_THRESHOLD && fboLayer);
}
// Bail out if we won't draw in this snapshot
@@ -1011,6 +1010,9 @@ void OpenGLRenderer::drawLines(float* points, int count, SkPaint* paint) {
}
void OpenGLRenderer::drawColor(int color, SkXfermode::Mode mode) {
+ // No need to check against the clip, we fill the clip region
+ if (mSnapshot->invisible) return;
+
Rect& clip(*mSnapshot->clipRect);
clip.snapToPixelBoundaries();
drawColorRect(clip.left, clip.top, clip.right, clip.bottom, color, mode, true);