Loading libs/hwui/DeferredLayerUpdater.h +7 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,9 @@ public: return false; } int getWidth() { return mWidth; } int getHeight() { return mHeight; } ANDROID_API bool setBlend(bool blend) { if (blend != mBlend) { mBlend = blend; Loading Loading @@ -75,6 +78,10 @@ public: mTransform = matrix ? new SkMatrix(*matrix) : nullptr; } SkMatrix* getTransform() { return mTransform; } ANDROID_API void setPaint(const SkPaint* paint); void apply(); Loading libs/hwui/FrameBuilder.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -669,6 +669,7 @@ void FrameBuilder::deferTextOnPathOp(const TextOnPathOp& op) { } void FrameBuilder::deferTextureLayerOp(const TextureLayerOp& op) { if (CC_UNLIKELY(!op.layer->isRenderable())) return; BakedOpState* bakedState = tryBakeOpState(op); if (!bakedState) return; // quick rejected currentLayer().deferUnmergeableOp(mAllocator, bakedState, OpBatchType::TextureLayer); Loading libs/hwui/Layer.h +4 −0 Original line number Diff line number Diff line Loading @@ -216,6 +216,10 @@ public: this->renderTarget = renderTarget; } inline bool isRenderable() const { return renderTarget != GL_NONE; } void setWrap(GLenum wrap, bool bindTexture = false, bool force = false) { texture.setWrap(wrap, bindTexture, force, renderTarget); } Loading libs/hwui/LayerRenderer.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -353,7 +353,7 @@ void LayerRenderer::flushLayer(RenderState& renderState, Layer* layer) { bool LayerRenderer::copyLayer(RenderState& renderState, Layer* layer, SkBitmap* bitmap) { Caches& caches = Caches::getInstance(); if (layer && layer->getRenderTarget() != GL_NONE if (layer && layer->isRenderable() && bitmap->width() <= caches.maxTextureSize && bitmap->height() <= caches.maxTextureSize) { Loading libs/hwui/RecordingCanvas.cpp +8 −4 Original line number Diff line number Diff line Loading @@ -574,15 +574,19 @@ void RecordingCanvas::drawLayer(DeferredLayerUpdater* layerHandle) { // We ref the DeferredLayerUpdater due to its thread-safe ref-counting semantics. mDisplayList->ref(layerHandle); Layer* layer = layerHandle->backingLayer(); // Note that the backing layer has *not* yet been updated, so don't trust // its width, height, transform, etc...! Matrix4 totalTransform(*(mState.currentSnapshot()->transform)); totalTransform.multiply(layer->getTransform()); if (layerHandle->getTransform()) { Matrix4 layerTransform(*layerHandle->getTransform()); totalTransform.multiply(layerTransform); } addOp(alloc().create_trivial<TextureLayerOp>( Rect(layer->getWidth(), layer->getHeight()), Rect(layerHandle->getWidth(), layerHandle->getHeight()), totalTransform, getRecordedClip(), layer)); layerHandle->backingLayer())); } void RecordingCanvas::callDrawGLFunction(Functor* functor) { Loading Loading
libs/hwui/DeferredLayerUpdater.h +7 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,9 @@ public: return false; } int getWidth() { return mWidth; } int getHeight() { return mHeight; } ANDROID_API bool setBlend(bool blend) { if (blend != mBlend) { mBlend = blend; Loading Loading @@ -75,6 +78,10 @@ public: mTransform = matrix ? new SkMatrix(*matrix) : nullptr; } SkMatrix* getTransform() { return mTransform; } ANDROID_API void setPaint(const SkPaint* paint); void apply(); Loading
libs/hwui/FrameBuilder.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -669,6 +669,7 @@ void FrameBuilder::deferTextOnPathOp(const TextOnPathOp& op) { } void FrameBuilder::deferTextureLayerOp(const TextureLayerOp& op) { if (CC_UNLIKELY(!op.layer->isRenderable())) return; BakedOpState* bakedState = tryBakeOpState(op); if (!bakedState) return; // quick rejected currentLayer().deferUnmergeableOp(mAllocator, bakedState, OpBatchType::TextureLayer); Loading
libs/hwui/Layer.h +4 −0 Original line number Diff line number Diff line Loading @@ -216,6 +216,10 @@ public: this->renderTarget = renderTarget; } inline bool isRenderable() const { return renderTarget != GL_NONE; } void setWrap(GLenum wrap, bool bindTexture = false, bool force = false) { texture.setWrap(wrap, bindTexture, force, renderTarget); } Loading
libs/hwui/LayerRenderer.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -353,7 +353,7 @@ void LayerRenderer::flushLayer(RenderState& renderState, Layer* layer) { bool LayerRenderer::copyLayer(RenderState& renderState, Layer* layer, SkBitmap* bitmap) { Caches& caches = Caches::getInstance(); if (layer && layer->getRenderTarget() != GL_NONE if (layer && layer->isRenderable() && bitmap->width() <= caches.maxTextureSize && bitmap->height() <= caches.maxTextureSize) { Loading
libs/hwui/RecordingCanvas.cpp +8 −4 Original line number Diff line number Diff line Loading @@ -574,15 +574,19 @@ void RecordingCanvas::drawLayer(DeferredLayerUpdater* layerHandle) { // We ref the DeferredLayerUpdater due to its thread-safe ref-counting semantics. mDisplayList->ref(layerHandle); Layer* layer = layerHandle->backingLayer(); // Note that the backing layer has *not* yet been updated, so don't trust // its width, height, transform, etc...! Matrix4 totalTransform(*(mState.currentSnapshot()->transform)); totalTransform.multiply(layer->getTransform()); if (layerHandle->getTransform()) { Matrix4 layerTransform(*layerHandle->getTransform()); totalTransform.multiply(layerTransform); } addOp(alloc().create_trivial<TextureLayerOp>( Rect(layer->getWidth(), layer->getHeight()), Rect(layerHandle->getWidth(), layerHandle->getHeight()), totalTransform, getRecordedClip(), layer)); layerHandle->backingLayer())); } void RecordingCanvas::callDrawGLFunction(Functor* functor) { Loading