mirror of
https://github.com/thorvg/thorvg.git
synced 2025-06-13 19:44:28 +00:00
loader lottie: tiny data copy optimization.
This patch tries to skip the matrix data copy as possible.
This commit is contained in:
parent
8212d6f0f9
commit
9e0a3aa678
4 changed files with 15 additions and 11 deletions
|
@ -82,4 +82,7 @@ using Size = Point;
|
|||
|
||||
uint16_t THORVG_VERSION_NUMBER();
|
||||
|
||||
|
||||
#define P(A) (A->pImpl) //Access to pimpl.
|
||||
|
||||
#endif //_TVG_COMMON_H_
|
||||
|
|
|
@ -20,7 +20,8 @@
|
|||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "tvgMath.h"
|
||||
#include "tvgCommon.h"
|
||||
#include "tvgPaint.h"
|
||||
#include "tvgShapeImpl.h"
|
||||
#include "tvgLottieModel.h"
|
||||
#include "tvgLottieBuilder.h"
|
||||
|
@ -104,9 +105,10 @@ static Shape* _updateTransform(Paint* paint, LottieTransform* transform, int32_t
|
|||
uint8_t opacity;
|
||||
if (!_updateTransform(transform, frameNo, false, matrix, opacity)) return nullptr;
|
||||
|
||||
auto pmatrix = paint->transform();
|
||||
paint->transform(mathMultiply(&pmatrix, &matrix));
|
||||
auto pmatrix = P(paint)->transform();
|
||||
paint->transform(pmatrix ? mathMultiply(pmatrix, &matrix) : matrix);
|
||||
paint->opacity(opacity);
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
@ -229,14 +231,14 @@ static Shape* _updatePath(LottieGroup* parent, LottiePath* path, int32_t frameNo
|
|||
mergingShape = newShape.get();
|
||||
static_cast<Scene*>(parent->scene)->push(std::move(newShape));
|
||||
}
|
||||
if (path->pathset(frameNo, mergingShape->pImpl->rs.path.cmds, mergingShape->pImpl->rs.path.pts)) {
|
||||
mergingShape->pImpl->update(RenderUpdateFlag::Path);
|
||||
if (path->pathset(frameNo, P(mergingShape)->rs.path.cmds, P(mergingShape)->rs.path.pts)) {
|
||||
P(mergingShape)->update(RenderUpdateFlag::Path);
|
||||
}
|
||||
return mergingShape;
|
||||
}
|
||||
|
||||
|
||||
static void _updateImage(LottieGroup* parent, LottieImage* image, int32_t frameNo, Shape* baseShape)
|
||||
static void _updateImage(LottieGroup* parent, LottieImage* image, int32_t frameNo, Paint* baseShape)
|
||||
{
|
||||
auto picture = Picture::gen();
|
||||
|
||||
|
@ -247,12 +249,15 @@ static void _updateImage(LottieGroup* parent, LottieImage* image, int32_t frameN
|
|||
}
|
||||
|
||||
if (baseShape) {
|
||||
picture->transform(baseShape->transform());
|
||||
if (auto matrix = P(baseShape)->transform()) {
|
||||
picture->transform(*matrix);
|
||||
}
|
||||
picture->opacity(baseShape->opacity());
|
||||
}
|
||||
parent->scene->push(std::move(picture));
|
||||
}
|
||||
|
||||
|
||||
static void _updateChildren(LottieGroup* parent, int32_t frameNo, Shape* baseShape, bool reset)
|
||||
{
|
||||
if (parent->children.empty()) return;
|
||||
|
|
|
@ -34,8 +34,6 @@
|
|||
#include "tvgShapeImpl.h"
|
||||
|
||||
|
||||
#define P(A) A->pImpl
|
||||
|
||||
/************************************************************************/
|
||||
/* Internal Class Implementation */
|
||||
/************************************************************************/
|
||||
|
|
|
@ -52,8 +52,6 @@ static FILE* _fopen(const char* filename, const char* mode)
|
|||
|
||||
#define SIZE(A) sizeof(A)
|
||||
|
||||
#define P(A) A->pImpl
|
||||
|
||||
/************************************************************************/
|
||||
/* Internal Class Implementation */
|
||||
/************************************************************************/
|
||||
|
|
Loading…
Add table
Reference in a new issue