diff options
author | Konstantin Ritt <ritt.ks@gmail.com> | 2019-04-09 07:21:32 +0300 |
---|---|---|
committer | Rebecca Worledge <rebecca.worledge@theqtcompany.com> | 2019-04-11 03:00:56 +0000 |
commit | 80151882a9a806f5fdbb700fd6a0db1300d9d5e0 (patch) | |
tree | d4a41feb20dbbf1f37218a6ec1674ab4fc5e97b3 | |
parent | fbaf1d8e3292929e79b7c7dcdbe8f28533809ceb (diff) |
BatchRenderer: do not prune cached frames next to the current one
there is no any reason to drop frames that would be re-evaluated
just a few ticks later
Change-Id: Ieda6cf5784319fe6b35e82ee520ee4abddaab703
Reviewed-by: Rebecca Worledge <rebecca.worledge@theqtcompany.com>
-rw-r--r-- | src/imports/rasterrenderer/batchrenderer.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/imports/rasterrenderer/batchrenderer.cpp b/src/imports/rasterrenderer/batchrenderer.cpp index 2a6f373..84e5a2f 100644 --- a/src/imports/rasterrenderer/batchrenderer.cpp +++ b/src/imports/rasterrenderer/batchrenderer.cpp @@ -140,11 +140,13 @@ bool BatchRenderer::gotoFrame(LottieAnimation *animator, int frame) void BatchRenderer::pruneFrameCache(Entry* e) { QHash<int, BMBase*>::iterator it = e->frameCache.begin(); - while (it != e->frameCache.end()) { - if (it.key() == e->currentFrame) { + int frame = it.key(); + if ((frame - e->currentFrame) * e->animDir >= 0) { // same frame or same direction ++it; } else { + qCDebug(lcLottieQtBodymovinRenderThread) << "Animator:" << static_cast<void*>(e->animator) + << "Remove frame from cache" << frame; delete it.value(); it = e->frameCache.erase(it); } |