diff options
author | 2012-09-17 17:25:49 -0700 | |
---|---|---|
committer | 2012-09-20 13:08:20 -0700 | |
commit | 710f46d9d6a5bf9ea1c1833384caf61e1934124f (patch) | |
tree | 5dbc56cf9b6bb957f9cbdaaff7283d44897b265d /libs/hwui/LayerRenderer.cpp | |
parent | 5ca88a103c2841b64bfa01b4848aec4b8aa64687 (diff) |
Polygonal rendering of simple fill shapes
bug:4419017
Change-Id: If0428e1732139786cba15f54b285d880e4a56b89
Diffstat (limited to 'libs/hwui/LayerRenderer.cpp')
-rw-r--r-- | libs/hwui/LayerRenderer.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/libs/hwui/LayerRenderer.cpp b/libs/hwui/LayerRenderer.cpp index 5d59a4cc3a1a..794c80a9b307 100644 --- a/libs/hwui/LayerRenderer.cpp +++ b/libs/hwui/LayerRenderer.cpp @@ -345,7 +345,7 @@ void LayerRenderer::flushLayer(Layer* layer) { bool LayerRenderer::copyLayer(Layer* layer, SkBitmap* bitmap) { Caches& caches = Caches::getInstance(); - if (layer && layer->isTextureLayer() && bitmap->width() <= caches.maxTextureSize && + if (layer && bitmap->width() <= caches.maxTextureSize && bitmap->height() <= caches.maxTextureSize) { GLuint fbo = caches.fboCache.get(); @@ -358,6 +358,7 @@ bool LayerRenderer::copyLayer(Layer* layer, SkBitmap* bitmap) { GLuint texture; GLuint previousFbo; + GLuint previousViewport[4]; GLenum format; GLenum type; @@ -387,11 +388,13 @@ bool LayerRenderer::copyLayer(Layer* layer, SkBitmap* bitmap) { float alpha = layer->getAlpha(); SkXfermode::Mode mode = layer->getMode(); + GLuint previousLayerFbo = layer->getFbo(); layer->setAlpha(255, SkXfermode::kSrc_Mode); layer->setFbo(fbo); glGetIntegerv(GL_FRAMEBUFFER_BINDING, (GLint*) &previousFbo); + glGetIntegerv(GL_VIEWPORT, (GLint*) &previousViewport); glBindFramebuffer(GL_FRAMEBUFFER, fbo); glGenTextures(1, &texture); @@ -459,9 +462,11 @@ error: glBindFramebuffer(GL_FRAMEBUFFER, previousFbo); layer->setAlpha(alpha, mode); - layer->setFbo(0); + layer->setFbo(previousLayerFbo); glDeleteTextures(1, &texture); caches.fboCache.put(fbo); + glViewport(previousViewport[0], previousViewport[1], + previousViewport[2], previousViewport[3]); return status; } |