diff options
| author | 2012-03-05 13:20:46 -0800 | |
|---|---|---|
| committer | 2012-03-05 13:20:46 -0800 | |
| commit | fb9c41c2060497a459d16c30122e1d082895e5d1 (patch) | |
| tree | 4140c0757c7f91367a7956bb76604e02c04ecef4 /libs/hwui/OpenGLRenderer.cpp | |
| parent | e78d7670ca6d0f7cd66edeef791978234dd8d857 (diff) | |
| parent | 2bf68f063b0077ddef6ebfe54f2ae5e063c2c229 (diff) | |
Merge "Deferred layer updates"
Diffstat (limited to 'libs/hwui/OpenGLRenderer.cpp')
| -rw-r--r-- | libs/hwui/OpenGLRenderer.cpp | 18 |
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; |