Loading libs/hwui/DeferredLayerUpdater.cpp +11 −2 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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); } } Loading libs/hwui/Layer.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -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); } Loading libs/hwui/Layer.h +14 −0 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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. */ Loading libs/hwui/LayerRenderer.cpp +3 −2 Original line number Diff line number Diff line Loading @@ -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); Loading libs/hwui/LayerRenderer.h +1 −1 Original line number Diff line number Diff line Loading @@ -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); Loading Loading
libs/hwui/DeferredLayerUpdater.cpp +11 −2 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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); } } Loading
libs/hwui/Layer.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -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); } Loading
libs/hwui/Layer.h +14 −0 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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. */ Loading
libs/hwui/LayerRenderer.cpp +3 −2 Original line number Diff line number Diff line Loading @@ -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); Loading
libs/hwui/LayerRenderer.h +1 −1 Original line number Diff line number Diff line Loading @@ -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); Loading