diff options
| author | 2012-03-02 13:37:47 -0800 | |
|---|---|---|
| committer | 2012-03-02 13:37:47 -0800 | |
| commit | 2bf68f063b0077ddef6ebfe54f2ae5e063c2c229 (patch) | |
| tree | da02b6113cb29371fb1e7321ffaf567bdf0fca8a /libs/hwui/OpenGLRenderer.cpp | |
| parent | d8f45c16a896d76d06550a91d78e8c5a3a57275a (diff) | |
Deferred layer updates
Change-Id: I83d9e564fe274db658dcee9e0cc5bbf9223ebb49
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; |