summaryrefslogtreecommitdiffstats
path: root/libs/hwui
diff options
context:
space:
mode:
authorRomain Guy <romainguy@google.com>2011-10-11 14:06:21 -0700
committerRomain Guy <romainguy@google.com>2011-10-11 14:06:21 -0700
commita9dc86b21defc26db0d71f276aff5c3af0b62ff5 (patch)
treee4274c53c5839ef4d6c658bc8b145a67db9568fb /libs/hwui
parent098ffcd521cd272ee3a63174759cceeda618d2ef (diff)
downloadframeworks_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.cpp15
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;
}