summaryrefslogtreecommitdiff
path: root/libs/hwui/OpenGLRenderer.cpp
diff options
context:
space:
mode:
author Romain Guy <romainguy@google.com> 2012-03-05 13:20:46 -0800
committer Android (Google) Code Review <android-gerrit@google.com> 2012-03-05 13:20:46 -0800
commitfb9c41c2060497a459d16c30122e1d082895e5d1 (patch)
tree4140c0757c7f91367a7956bb76604e02c04ecef4 /libs/hwui/OpenGLRenderer.cpp
parente78d7670ca6d0f7cd66edeef791978234dd8d857 (diff)
parent2bf68f063b0077ddef6ebfe54f2ae5e063c2c229 (diff)
Merge "Deferred layer updates"
Diffstat (limited to 'libs/hwui/OpenGLRenderer.cpp')
-rw-r--r--libs/hwui/OpenGLRenderer.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index e3148e8996db..339ae0a5dea0 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -2364,6 +2364,24 @@ void OpenGLRenderer::drawLayer(Layer* layer, float x, float y, SkPaint* paint) {
return;
}
+ if (layer->deferredUpdateScheduled && layer->renderer && layer->displayList) {
+ OpenGLRenderer* renderer = layer->renderer;
+ Rect& dirty = layer->dirtyRect;
+
+ interrupt();
+ renderer->setViewport(layer->layer.getWidth(), layer->layer.getHeight());
+ renderer->prepareDirty(dirty.left, dirty.top, dirty.right, dirty.bottom, !layer->isBlend());
+ renderer->drawDisplayList(layer->displayList, layer->getWidth(), layer->getHeight(),
+ dirty, DisplayList::kReplayFlag_ClipChildren);
+ renderer->finish();
+ resume();
+
+ dirty.setEmpty();
+ layer->deferredUpdateScheduled = false;
+ layer->renderer = NULL;
+ layer->displayList = NULL;
+ }
+
mCaches.activeTexture(0);
int alpha;