summaryrefslogtreecommitdiff
path: root/libs/hwui/DeferredLayerUpdater.cpp
diff options
context:
space:
mode:
author Chris Craik <ccraik@google.com> 2014-02-25 18:50:17 -0800
committer Chris Craik <ccraik@google.com> 2014-02-25 18:50:17 -0800
commit9757ac0b9d62f6aea5e47cfb375f445c78bb7897 (patch)
treed17c80970154798e66dbf914974926b15fa33f61 /libs/hwui/DeferredLayerUpdater.cpp
parent5eb4adcbda0ff22e48716d3cf9356a9a720475b5 (diff)
Fix TextureView texture filtering.
bug:11748993 TextureView should always be drawn with linear filtering if drawing a buffer sized differently from the layer. This fixes a bug where TextureViews that were sized differently from their contents wouldn't be drawn with texture filtering, causing visible scaling artifacts. Change-Id: I8a5d27452fe7269ec53896992f37cff51e3ce15a
Diffstat (limited to 'libs/hwui/DeferredLayerUpdater.cpp')
-rw-r--r--libs/hwui/DeferredLayerUpdater.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/libs/hwui/DeferredLayerUpdater.cpp b/libs/hwui/DeferredLayerUpdater.cpp
index 62f6c7636883..7a2e288af13f 100644
--- a/libs/hwui/DeferredLayerUpdater.cpp
+++ b/libs/hwui/DeferredLayerUpdater.cpp
@@ -112,6 +112,15 @@ void DeferredLayerUpdater::doUpdateTexImage() {
frameNumber = newFrameNumber;
dropCounter++;
}
+
+ bool forceFilter = false;
+ sp<GraphicBuffer> buffer = mSurfaceTexture->getCurrentBuffer();
+ if (buffer != NULL) {
+ // force filtration if buffer size != layer size
+ forceFilter = mWidth != buffer->getWidth()
+ || mHeight != buffer->getHeight();
+ }
+
#if DEBUG_RENDERER
if (dropCounter > 0) {
RENDERER_LOGD("Dropped %d frames on texture layer update", dropCounter);
@@ -120,8 +129,8 @@ void DeferredLayerUpdater::doUpdateTexImage() {
mSurfaceTexture->getTransformMatrix(transform);
GLenum renderTarget = mSurfaceTexture->getCurrentTextureTarget();
- LayerRenderer::updateTextureLayer(mLayer, mWidth, mHeight, !mBlend,
- renderTarget, transform);
+ LayerRenderer::updateTextureLayer(mLayer, mWidth, mHeight,
+ !mBlend, forceFilter, renderTarget, transform);
}
}