From: subhransu mohanty Date: Mon, 3 Jun 2019 00:12:50 +0000 (+0900) Subject: rlottie: optimize matte rendering when both src and matte are invisible X-Git-Tag: submit/tizen/20190619.051039~18 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7dc001c1ff9aca76ab02d21215e8f08f3c29e3c0;p=platform%2Fcore%2Fuifw%2Flottie-player.git rlottie: optimize matte rendering when both src and matte are invisible --- diff --git a/src/lottie/lottieitem.cpp b/src/lottie/lottieitem.cpp index aa30000..e0a9f33 100644 --- a/src/lottie/lottieitem.cpp +++ b/src/lottie/lottieitem.cpp @@ -597,26 +597,18 @@ void LOTCompLayerItem::render(VPainter *painter, const VRle &inheritMask, const } } - LOTLayerItem *matteLayer = nullptr; + LOTLayerItem *matte = nullptr; for (const auto &layer : mLayers) { if (layer->hasMatte()) { - if (matteLayer) { - vWarning << "two consecutive layer has matter : not supported"; - } - matteLayer = layer.get(); - continue; - } - - if (layer->visible()) { - if (matteLayer) { - if (matteLayer->visible()) - renderMatteLayer(painter, mask, matteRle, matteLayer, layer.get()); + matte = layer.get(); + } else { + if (matte && matte->visible() && layer->visible()) { + renderMatteLayer(painter, mask, matteRle, matte, layer.get()); } else { layer->render(painter, mask, matteRle); } + matte = nullptr; } - - matteLayer = nullptr; } } @@ -710,8 +702,19 @@ void LOTCompLayerItem::renderList(std::vector &list) { if (!visible()) return; + LOTLayerItem *matte = nullptr; for (const auto &layer : mLayers) { - layer->renderList(list); + if (layer->hasMatte()) { + matte = layer.get(); + } else { + if (matte && matte->visible() && layer->visible()) { + layer->renderList(list); + matte->renderList(list); + } else { + layer->renderList(list); + } + matte = nullptr; + } } } diff --git a/src/vector/vdrawable.cpp b/src/vector/vdrawable.cpp index 575d6cd..dc933f5 100644 --- a/src/vector/vdrawable.cpp +++ b/src/vector/vdrawable.cpp @@ -41,7 +41,8 @@ void VDrawable::preprocess(const VRect &clip) VRaster::generateFillInfo(mRleFuture, std::move(mPath), std::move(mRle), mFillRule, clip); } - mRle = VRle(); + mRle = {}; + mPath = {}; mFlag &= ~DirtyFlag(DirtyState::Path); } }