Commit graph

376 commits

Author SHA1 Message Date
Hermet Park
036ae3c2af renderer: code refactoring
Replaced the transformation with
a strong associated data field.

This helps to reduce the binary size (-1k).
2024-07-29 23:27:19 +09:00
Hermet Park
356b813f79 lottie/expressions: hotfix
- fixed a memory leak.
- corrected loopIn key value.
2024-07-26 16:03:55 +09:00
Hermet Park
c8c565df92 lottie/expressions: feature support enhancement
- revised the transformation building logic.
- rectified to properly search "this" composition layers.
- rectified the linear interpolation implementation.
- added "pingpong" looping attributes.
2024-07-24 11:26:20 +09:00
Hermet Park
3804bbec57 lottie: code refactoring
- removed unnecessary variables.
- migrated the composition methods to the precomp layer.
2024-07-24 11:26:20 +09:00
Hermet Park
18eb465fe8 lottie: ++optimization with object culling
More precisely, culling the render objects by
determining if the group has no renderable objects.

Additionally, check opacity to quickly return
in the rendering process.
2024-07-22 17:17:08 +09:00
Hermet Park
bc30bca366 lottie: hotfix with an intermediate patch merge. 2024-07-22 12:28:17 +09:00
Hermet Park
3181ea660f lottie: ++scene rendering optimization
Apply LottieRenderPooler to texts.
2024-07-22 12:08:27 +09:00
Hermet Park
803dcb3fb9 lottie/expressions: ++coverage enhancement
Allow to access layer index globally.
2024-07-19 23:01:29 +09:00
Hermet Park
16cb1020ac lottie/expressions: added a missing polystar property build. 2024-07-18 20:46:06 +09:00
Hermet Park
f06127ab93 lottie: ++scene rendering optimization
Apply LottieRenderPooler to path/rect/ellipse/polystar.

This enhances the animation performance: ~10%
2024-07-14 19:26:51 +09:00
Hermet Park
c20ecbcc58 lottie: introduced LottieRenderPooler
LottieRenderPooler is designed to manages rendering
instances(paints) efficiently through a simple pooling
mechanism to resuse among the animations

This replaces the previous individusal paints implemenations
among solidfill, precomp vierport and pictures,
also fix a potential paints corruption problems.
2024-07-13 19:22:06 +09:00
Hermet Park
cfc8f13584 lottie/parser: tiny binary size reduction 2024-07-12 14:43:00 +09:00
Mira Grudzinska
8340c1e1d7 lottie: support 'direction' in ellipses 2024-07-12 14:23:27 +09:00
Mira Grudzinska
bedaa909ad lottie: remove unnecessary cast 2024-07-12 13:54:49 +09:00
Hermet Park
22bab117a3 lottie: clarify shape direction.
There are only two options clockwise or counter-clockwise.
2024-07-12 00:39:31 +09:00
Mira Grudzinska
6025635712 lottie: apply direction to rect 2024-07-12 00:05:08 +09:00
Hermet Park
4cb327c9fd lottie: ++ scene composing optimization
retain resuable layer solid paint during animation.
2024-07-11 21:30:31 +09:00
Hermet Park
d95ec72335 lottie: ++ scene composing optimization
retain reusable precomp clipper shapes during animation.
2024-07-11 21:30:31 +09:00
Hermet Park
d6d4839f1a lottie: ++memory access stability
Internal matrix can be null.
This update prevents such cases by using a safer API.
2024-07-11 01:03:50 +09:00
Jinny You
fdc1ad4d2c lottie/text: Support text range selector (Phase 1)
This patch provides initial support for the text range selector. Full support will be added gradually in subsequent steps. This is the first step.

Text range selector with following properties:
1. Text Range Selector (Units)
2. Text Style
- Fill Color
- Fill Opacity
- Stroke Color
- Stroke Width
- Stroke Opacity
- Opacity
- Rotation
- Position
- Scale
2024-07-11 00:49:57 +09:00
Hermet Park
5a2a6fc4a9 common: replace the round() with nearbyint()
nearbyint() is 2x faster than round() in our local test.
2024-07-10 23:43:10 +09:00
Mira Grudzinska
e07ff127dd lottie: improvement 3d rotation
For rotation around the X and Y axes, the transformation
matrix was incorrectly created - elements e12 and e21
were omitted. Now fixed.
2024-07-10 16:58:03 +09:00
Hermet Park
69b1fb8208 common/math: code refactoring
- migrate tvgLine to tvgMath
- associate line functions with classes.
2024-07-10 00:21:02 +09:00
Hermet Park
44955b704e common/math: code refactoring
Replaced the prefix "math" with "tvg" namespace.
2024-07-10 00:21:02 +09:00
Hermet Park
79cf7ca5af common/math: introduced custom atan2()
the custom atan2 algorithm by Remez.
see: https://en.wikipedia.org/wiki/Remez_algorithm

This improved the Lottie example by ~2ms.
Total atan2 performance time was reduced by 43%
2024-07-09 23:50:37 +09:00
Hermet Park
e0116b90c4 lottie: code refactoring
- _draw() returns boolean whether merging shape is allowed or not.
- renamed some internal variables.
2024-07-09 12:27:32 +09:00
Mira Grudzinska
49e58eecc0 lottie: enhance support for ao: 1
Adding support for auto-orient=true for frames <= first
and >= last, as well as for positions specified without
outer and inner tangent.
2024-07-09 12:27:21 +09:00
Mira Grudzinska
423e37d4d5 lottie: add support for image size
The width and height of the image must
be specified in the Lottie file and must
be taken into account during rendering.
2024-07-08 21:20:34 +09:00
Hermet Park
8cbfb4b8bb lottie: ++thread safety.
comp pointer is used for checking if the header is ready.
It can be written in a worker thread and needs a critical
section on the reader side.

This also potentally improve the thread efficiency
from the segment() / marker() function calls.
2024-07-07 13:26:05 +09:00
Hermet Park
53a570e680 common: Fix a compilation failure on VS 2017
issue: https://github.com/thorvg/thorvg/issues/2512
2024-07-03 22:45:29 +09:00
Hermet Park
e8f1790e58 lottie: fix a regression bug of masking
InverseAlphaMasking should be applied as intended,
but it was mistakenly reverted to alpha.

regression in v0.14.0 by: 2c7a83406e
2024-07-03 13:21:47 +09:00
Hermet Park
cbf124632f lottie: allow image asset sharing among LottiePicture instances
Previously, the Lottie builder didn't account for image asset sharing
among multiple layers. This update rectifies the situation.

issue: https://github.com/thorvg/thorvg/issues/2428
2024-07-03 13:21:47 +09:00
Hermet Park
4f354f6d5e lottie/parser: optimization++
Skip the data constructuion if the mask mode
is none. it's not used at all.
2024-07-03 13:21:47 +09:00
Hermet Park
269ef22a97 lottie/builder: revise the masking update.
Append the mask shape to the previous one, instead of composition,
when it's able by the condition.

issue: https://github.com/thorvg/thorvg/issues/2426
2024-07-03 13:21:47 +09:00
Hermet Park
189b1bf4e7 common: code refactoring
replaced min/max with the standard library
2024-07-01 22:10:46 +09:00
Hermet Park
a48b6003af lottie: remove exception handling
don't stop the parsing when the data type is incorrect.
just let it slide.

issue: https://github.com/thorvg/thorvg/issues/2389
2024-07-01 22:07:06 +09:00
Hermet Park
fb20df9ad9 lottie/rapidjson: --assert
Save binary size about 0.8kb
2024-07-01 22:07:06 +09:00
Josh Soref
e061fa6628
common: fix 178+ spelling errors 2024-07-01 21:58:46 +09:00
Vincent Torri
4a23c39520 json loader: fix warnings in jerryscript on Windows 2024-07-01 15:02:46 +09:00
Hermet Park
87cd9e4795 lottie: fix a data-race problem
make it sync call before accessing the composition data
from marker and segments.

issue: https://github.com/thorvg/thorvg/issues/2462
2024-06-27 01:09:10 +09:00
Hermet Park
2c7a83406e lottie: hotfix for preventing a crash.
MaskMode=None is not properly addressed,
Prevent the crash from the use-case.

issue: https://github.com/thorvg/thorvg/issues/2426
2024-06-23 11:57:40 +09:00
Hermet Park
b79e8d5f24 lottie: fix a compile error on MSC with clang.
issue: https://github.com/thorvg/thorvg/issues/2347
2024-06-20 17:47:15 +09:00
Mira Grudzinska
d7ab592fb9 lottie: fix repeater order
Assigning numbers 1 or 2 to a bool always
resulted in true. Now fixed and repeated
shapes are drawn in the proper order.
If the repeater had no elements, iterating
shapes from the end would result in a segf.
This issue is now fixed.
2024-06-19 11:02:41 +09:00
Jinny You
e346cbb5ca lottie: Add exception for lottie doesn't have exported glyph
Added handling logic for missing characters to prevent program hang.
2024-06-05 14:43:28 +02:00
Jinny You
97a1aa136a lottie: Fix invalid font match
When Lottie has similar font names, it incorrectly matches fonts due to a logic bug.

This error causes an infinite loop when searching for glyphs.
2024-06-05 12:38:20 +09:00
Mira Grudzinska
33f5ea34c0 common: strokeTrim api introduced
New api sets/gets the trim of the stroke
along the defined path segment, allowing
control over which part of the stroke is
visible.

@issue: https://github.com/thorvg/thorvg/issues/2190
2024-06-05 11:55:36 +09:00
Mira Grudzinska
ca92d4a53b lottie: fix matte layer finding
Layer identifiers do not have to be unique within
the entire file - they are unique within a given
group. Searching the entire composition to find
the referenced matte was an incorrect approach.

Error introduced by 1ee79a6c2a

@Issue: https://github.com/thorvg/thorvg/issues/2349
2024-06-04 15:27:44 +03:00
Mira Grudzinska
5b6a774b04 common: fix typos & remove unused var 2024-06-04 11:20:59 +09:00
Mira Grudzinska
be22ede274 lottie: parsing obj property inside this obj
Shape's property 'direction' should be parsed
together with other properties specific for
the shape. This solves the issue with direction-
it wasn't working.
2024-06-03 11:27:23 +09:00
Hermet Park
9300de2d06 lottie/builder: revise the layer build logic
Promote the text/image updates to the layer level.
2024-05-30 13:00:42 +09:00