Merge "Fix TextureView texture filtering."
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -46,6 +46,7 @@ Layer::Layer(const uint32_t layerWidth, const uint32_t layerHeight):
|
||||
stencil = NULL;
|
||||
debugDrawUpdate = false;
|
||||
hasDrawnSinceUpdate = false;
|
||||
forceFilter = false;
|
||||
deferredList = NULL;
|
||||
caches.resourceCache.incrementRefcount(this);
|
||||
}
|
||||
|
||||
@@ -127,6 +127,14 @@ public:
|
||||
return texture.blend;
|
||||
}
|
||||
|
||||
inline void setForceFilter(bool forceFilter) {
|
||||
this->forceFilter = forceFilter;
|
||||
}
|
||||
|
||||
inline bool getForceFilter() const {
|
||||
return forceFilter;
|
||||
}
|
||||
|
||||
inline void setAlpha(int alpha) {
|
||||
this->alpha = alpha;
|
||||
}
|
||||
@@ -342,10 +350,16 @@ private:
|
||||
*/
|
||||
SkColorFilter* colorFilter;
|
||||
|
||||
/**
|
||||
* Indicates raster data backing the layer is scaled, requiring filtration.
|
||||
*/
|
||||
bool forceFilter;
|
||||
|
||||
/**
|
||||
* Opacity of the layer.
|
||||
*/
|
||||
int alpha;
|
||||
|
||||
/**
|
||||
* Blending mode of the layer.
|
||||
*/
|
||||
|
||||
@@ -290,14 +290,15 @@ Layer* LayerRenderer::createTextureLayer() {
|
||||
}
|
||||
|
||||
void LayerRenderer::updateTextureLayer(Layer* layer, uint32_t width, uint32_t height,
|
||||
bool isOpaque, GLenum renderTarget, float* transform) {
|
||||
bool isOpaque, bool forceFilter, GLenum renderTarget, float* textureTransform) {
|
||||
if (layer) {
|
||||
layer->setBlend(!isOpaque);
|
||||
layer->setForceFilter(forceFilter);
|
||||
layer->setSize(width, height);
|
||||
layer->layer.set(0.0f, 0.0f, width, height);
|
||||
layer->region.set(width, height);
|
||||
layer->regionRect.set(0.0f, 0.0f, width, height);
|
||||
layer->getTexTransform().load(transform);
|
||||
layer->getTexTransform().load(textureTransform);
|
||||
|
||||
if (renderTarget != layer->getRenderTarget()) {
|
||||
layer->setRenderTarget(renderTarget);
|
||||
|
||||
@@ -56,7 +56,7 @@ public:
|
||||
ANDROID_API static Layer* createRenderLayer(uint32_t width, uint32_t height);
|
||||
ANDROID_API static bool resizeLayer(Layer* layer, uint32_t width, uint32_t height);
|
||||
ANDROID_API static void updateTextureLayer(Layer* layer, uint32_t width, uint32_t height,
|
||||
bool isOpaque, GLenum renderTarget, float* transform);
|
||||
bool isOpaque, bool forceFilter, GLenum renderTarget, float* textureTransform);
|
||||
ANDROID_API static void destroyLayer(Layer* layer);
|
||||
ANDROID_API static void destroyLayerDeferred(Layer* layer);
|
||||
ANDROID_API static bool copyLayer(Layer* layer, SkBitmap* bitmap);
|
||||
|
||||
@@ -1068,6 +1068,7 @@ void OpenGLRenderer::drawTextureLayer(Layer* layer, const Rect& rect) {
|
||||
setupDrawExternalTexture(layer->getTexture());
|
||||
}
|
||||
if (currentTransform()->isPureTranslate() &&
|
||||
!layer->getForceFilter() &&
|
||||
layer->getWidth() == (uint32_t) rect.getWidth() &&
|
||||
layer->getHeight() == (uint32_t) rect.getHeight()) {
|
||||
const float x = (int) floorf(rect.left + currentTransform()->getTranslateX() + 0.5f);
|
||||
|
||||
Reference in New Issue
Block a user