From: Subhransu Mohanty Date: Tue, 25 May 2021 07:17:18 +0000 (+0900) Subject: Improve matte rendering performance for simple layer X-Git-Tag: submit/tizen/20210531.030446~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c273d56ffb5cb643204b926abcd09b35fdc7588e;p=platform%2Fcore%2Fuifw%2Flottie-player.git Improve matte rendering performance for simple layer Change-Id: I58902f2c7a30056e605cc2884d834451edc947e8 --- diff --git a/src/lottie/lottieitem.cpp b/src/lottie/lottieitem.cpp index 7a746b8..690e2c7 100644 --- a/src/lottie/lottieitem.cpp +++ b/src/lottie/lottieitem.cpp @@ -597,11 +597,21 @@ void renderer::CompLayer::renderMatteLayer(VPainter *painter, const VRle &mask, srcBitmap.updateLuma(); } + auto clip = layerPainter.clipBoundingRect(); + + // if the layer has only one renderer then use it as the clip rect + // when blending 2 buffer and copy back to final buffer to avoid + // unnecessary pixel processing. + if (layer->renderList().size() == 1) + { + clip = layer->renderList()[0]->rle().boundingRect(); + } + // 2.3 draw src buffer as mask - layerPainter.drawBitmap(VPoint(), srcBitmap); + layerPainter.drawBitmap(clip, srcBitmap, clip); layerPainter.end(); // 3. draw the result buffer into painter - painter->drawBitmap(VPoint(), layerBitmap); + painter->drawBitmap(clip, layerBitmap, clip); cache.release_surface(srcBitmap); cache.release_surface(layerBitmap); diff --git a/src/vector/vpainter.cpp b/src/vector/vpainter.cpp index 4ebbc5c..38a58e0 100644 --- a/src/vector/vpainter.cpp +++ b/src/vector/vpainter.cpp @@ -84,12 +84,12 @@ void VPainter::drawBitmapUntransform(const VRect & target, { mSpanData.initTexture(&bitmap, const_alpha, source); if (!mSpanData.mUnclippedBlendFunc) return; - mSpanData.dx = float(-target.x()); - mSpanData.dy = float(-target.y()); - VRect rr = source.translated(target.x(), target.y()); + // update translation matrix for source texture. + mSpanData.dx = float(target.x() - source.x()); + mSpanData.dy = float(target.y() - source.y()); - fillRect(rr, &mSpanData); + fillRect(target, &mSpanData); } VPainter::VPainter(VBitmap *buffer)