mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-10 16:29:55 +00:00
rlottie: Update DirtyMatrix only when needed.
This commit is contained in:
parent
88593df18d
commit
75f9d3ff29
@ -467,18 +467,20 @@ void LOTLayerItem::update(int frameNumber, const VMatrix &parentMatrix,
|
|||||||
m *= parentMatrix;
|
m *= parentMatrix;
|
||||||
|
|
||||||
// 3. update the dirty flag based on the change
|
// 3. update the dirty flag based on the change
|
||||||
if (!mCombinedMatrix.fuzzyCompare(m)) {
|
if (mCombinedMatrix != m) {
|
||||||
mDirtyFlag |= DirtyFlagBit::Matrix;
|
mDirtyFlag |= DirtyFlagBit::Matrix;
|
||||||
|
mCombinedMatrix = m;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!vCompare(mCombinedAlpha, alpha)) {
|
if (!vCompare(mCombinedAlpha, alpha)) {
|
||||||
mDirtyFlag |= DirtyFlagBit::Alpha;
|
mDirtyFlag |= DirtyFlagBit::Alpha;
|
||||||
|
mCombinedAlpha = alpha;
|
||||||
}
|
}
|
||||||
mCombinedMatrix = m;
|
|
||||||
mCombinedAlpha = alpha;
|
|
||||||
|
|
||||||
// 4. update the mask
|
// 4. update the mask
|
||||||
if (mLayerMask) {
|
if (mLayerMask) {
|
||||||
mLayerMask->update(frameNo(), m, alpha, mDirtyFlag);
|
mLayerMask->update(frameNo(), mCombinedMatrix, mCombinedAlpha,
|
||||||
|
mDirtyFlag);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 5. if no parent property change and layer is static then nothing to do.
|
// 5. if no parent property change and layer is static then nothing to do.
|
||||||
@ -1034,28 +1036,30 @@ void LOTContentGroupItem::addChildren(LOTGroupData *data)
|
|||||||
void LOTContentGroupItem::update(int frameNo, const VMatrix &parentMatrix,
|
void LOTContentGroupItem::update(int frameNo, const VMatrix &parentMatrix,
|
||||||
float parentAlpha, const DirtyFlag &flag)
|
float parentAlpha, const DirtyFlag &flag)
|
||||||
{
|
{
|
||||||
VMatrix m = parentMatrix;
|
|
||||||
float alpha = parentAlpha;
|
float alpha = parentAlpha;
|
||||||
DirtyFlag newFlag = flag;
|
DirtyFlag newFlag = flag;
|
||||||
|
|
||||||
if (mData && mData->mTransform) {
|
if (mData && mData->mTransform) {
|
||||||
// update the matrix and the flag
|
VMatrix m = mData->mTransform->matrix(frameNo);
|
||||||
if ((flag & DirtyFlagBit::Matrix) || !mData->mTransform->isStatic()) {
|
m *= parentMatrix;
|
||||||
|
|
||||||
|
if (!(flag & DirtyFlagBit::Matrix) && !mData->mTransform->isStatic() &&
|
||||||
|
(m != mMatrix)) {
|
||||||
newFlag |= DirtyFlagBit::Matrix;
|
newFlag |= DirtyFlagBit::Matrix;
|
||||||
}
|
}
|
||||||
m = mData->mTransform->matrix(frameNo);
|
|
||||||
m *= parentMatrix;
|
|
||||||
alpha *= mData->mTransform->opacity(frameNo);
|
|
||||||
|
|
||||||
|
mMatrix = m;
|
||||||
|
|
||||||
|
alpha *= mData->mTransform->opacity(frameNo);
|
||||||
if (!vCompare(alpha, parentAlpha)) {
|
if (!vCompare(alpha, parentAlpha)) {
|
||||||
newFlag |= DirtyFlagBit::Alpha;
|
newFlag |= DirtyFlagBit::Alpha;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
mMatrix = parentMatrix;
|
||||||
}
|
}
|
||||||
|
|
||||||
mMatrix = m;
|
|
||||||
|
|
||||||
for (const auto &content : mContents) {
|
for (const auto &content : mContents) {
|
||||||
content->update(frameNo, m, alpha, newFlag);
|
content->update(frameNo, matrix(), alpha, newFlag);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user