diff options
author | Romain Guy <romainguy@google.com> | 2011-10-11 14:06:21 -0700 |
---|---|---|
committer | Romain Guy <romainguy@google.com> | 2011-10-11 14:06:21 -0700 |
commit | a9dc86b21defc26db0d71f276aff5c3af0b62ff5 (patch) | |
tree | e4274c53c5839ef4d6c658bc8b145a67db9568fb /libs/hwui | |
parent | 098ffcd521cd272ee3a63174759cceeda618d2ef (diff) | |
download | frameworks_base-a9dc86b21defc26db0d71f276aff5c3af0b62ff5.zip frameworks_base-a9dc86b21defc26db0d71f276aff5c3af0b62ff5.tar.gz frameworks_base-a9dc86b21defc26db0d71f276aff5c3af0b62ff5.tar.bz2 |
Correctly apply transforms when getting a TextureView's bitmap
Bug #5439406
Change-Id: I271a9a2e38f5b3600dc158f8f442a6b0893f472b
Diffstat (limited to 'libs/hwui')
-rw-r--r-- | libs/hwui/LayerRenderer.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/libs/hwui/LayerRenderer.cpp b/libs/hwui/LayerRenderer.cpp index 349b9e3..0799508 100644 --- a/libs/hwui/LayerRenderer.cpp +++ b/libs/hwui/LayerRenderer.cpp @@ -264,7 +264,7 @@ Layer* LayerRenderer::createTextureLayer(bool isOpaque) { layer->setFbo(0); layer->setAlpha(255, SkXfermode::kSrcOver_Mode); layer->layer.set(0.0f, 0.0f, 0.0f, 0.0f); - layer->texCoords.set(0.0f, 1.0f, 0.0f, 1.0f); + layer->texCoords.set(0.0f, 1.0f, 1.0f, 0.0f); layer->region.clear(); layer->setRenderTarget(GL_NONE); // see ::updateTextureLayer() @@ -400,6 +400,18 @@ bool LayerRenderer::copyLayer(Layer* layer, SkBitmap* bitmap) { renderer.setViewport(bitmap->width(), bitmap->height()); renderer.OpenGLRenderer::prepareDirty(0.0f, 0.0f, bitmap->width(), bitmap->height(), !layer->isBlend()); + + glDisable(GL_SCISSOR_TEST); + renderer.translate(0.0f, bitmap->height()); + renderer.scale(1.0f, -1.0f); + + mat4 texTransform(layer->getTexTransform()); + + mat4 invert; + invert.translate(0.0f, 1.0f, 0.0f); + invert.scale(1.0f, -1.0f, 1.0f); + layer->getTexTransform().multiply(invert); + if ((error = glGetError()) != GL_NO_ERROR) goto error; { @@ -413,6 +425,7 @@ bool LayerRenderer::copyLayer(Layer* layer, SkBitmap* bitmap) { if ((error = glGetError()) != GL_NO_ERROR) goto error; } + layer->getTexTransform().load(texTransform); status = true; } |