Commit graph

3250 commits

Author SHA1 Message Date
Hermet Park
656fb6f498 renderer/animation: rectified the segment value exception
A zero-range segment can be useful for a stopped motion.
There is no need to prohibit these values.
2024-09-30 15:38:10 +09:00
Hermet Park
2478a5f65a 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-09-30 15:38:05 +09:00
Hermet Park
4e3d027fa7 lottie: code refactoring
- removed unnecessary variables.
- migrated the composition methods to the precomp layer.
2024-09-30 15:38:00 +09:00
Mira Grudzinska
792b6a786d sw_engine: fix linear grad issue
The restriction of the 'length' of a linear gradient
to values greater than FLT_EPSILON was causing rendering
issues in cases where it was a valid gradient with well
defined dx and dy values.

@Issue: https://github.com/thorvg/thorvg/issues/2582
2024-09-30 15:37:55 +09:00
Hermet Park
7bb4eda3a3 svg: resolve compiler warnings.
../src/loaders/svg/tvgSvgLoader.cpp: In function ‘bool _toColor(const char*, uint8_t*, uint8_t*, uint8_t*, char**)’:
../src/loaders/svg/tvgSvgLoader.cpp:108:17: warning: ‘hue’ may be used uninitialized [-Wmaybe-uninitialized]
  108 |     const char* _end = end ? *end : nullptr;
      |                 ^~~~
../src/loaders/svg/tvgSvgLoader.cpp:713:31: note: ‘hue’ was declared here
  713 |         const char *content, *hue, *saturation, *brightness;
      |                               ^~~
../src/loaders/svg/tvgSvgLoader.cpp:108:17: warning: ‘saturation’ may be used uninitialized [-Wmaybe-uninitialized]
  108 |     const char* _end = end ? *end : nullptr;
      |                 ^~~~
../src/loaders/svg/tvgSvgLoader.cpp:713:37: note: ‘saturation’ was declared here
  713 |         const char *content, *hue, *saturation, *brightness;
      |                                     ^~~~~~~~~~
../src/loaders/svg/tvgSvgLoader.cpp:108:17: warning: ‘brightness’ may be used uninitialized [-Wmaybe-uninitialized]
  108 |     const char* _end = end ? *end : nullptr;
      |                 ^~~~
../src/loaders/svg/tvgSvgLoader.cpp:713:50: note: ‘brightness’ was declared here
  713 |         const char *content, *hue, *saturation, *brightness;
      |                                                  ^~~~~~~~~~
2024-09-30 15:37:52 +09:00
Hermet Park
d7e4fc7d6a 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-09-30 15:37:40 +09:00
Hermet Park
935d3d83ae lottie: hotfix with an intermediate patch merge. 2024-09-30 15:37:32 +09:00
Hermet Park
7a6d2e0c5a lottie: ++scene rendering optimization
Apply LottieRenderPooler to texts.
2024-09-30 15:37:26 +09:00
Hermet Park
859b3f6c39 example: merge Path & PathCopy 2024-09-30 15:37:15 +09:00
Hermet Park
64e8bfddfd renderer: quick skip rendering if the opacity is zero
This also resolves a corner case bug introduced by
lottie render pooling: f06127ab93
2024-09-30 15:37:06 +09:00
Hermet Park
fe107ea757 sw_engine: hotfix simd build breaks
regression by 837cf32bcb
2024-09-30 15:36:30 +09:00
Hermet Park
d671f8637b lottie/expressions: ++coverage enhancement
Allow to access layer index globally.
2024-09-30 15:36:24 +09:00
Hermet Park
9749e7fea0 examples: updated lottie samples 2024-09-30 15:36:18 +09:00
Hermet Park
072ce383db examples: added more expressions samples 2024-09-30 15:36:11 +09:00
Hermet Park
0b66cd422e lottie/expressions: added a missing polystar property build. 2024-09-30 15:35:59 +09:00
Hermet Park
e4fb0ec383 sw_engine: ++alpha blending operation.
Reduce instructions, improving its performance by ~15%
2024-09-30 15:35:52 +09:00
Mira Grudzinska
220764fde9 tests: version api tests 2024-09-30 15:35:45 +09:00
Mira Grudzinska
658ed7df7f capi: the version api binding 2024-09-30 15:35:40 +09:00
Mira Grudzinska
0944f3253d common: version api introduced
@Issue: https://github.com/thorvg/thorvg/issues/2543
2024-09-30 15:35:34 +09:00
Sergii Liebodkin
e16dcdcb6d wg_engine: fix cubic generation artifacts (GradientStroke example)
[GradientStroke](https://github.com/thorvg/thorvg/issues/2435) example

More accurate coefitient computation
2024-09-30 15:35:28 +09:00
Sergii Liebodkin
8d150a17b4 wg_engine: fix fill spread artifacts
[issues 2435: ](FillSpread) example

Fixed range selector edged cases
2024-09-30 15:35:22 +09:00
Hermet Park
3cb7aecb6a renderer: ++null check
fixed a Duplicate example crash, regression by:
f06127ab93
2024-09-30 15:35:16 +09:00
Sergii Liebodkin
03b36cea7b wg_engine: ClipPath support
[issues 1479: ClipPath](#1479)

Supports ClipPath composition.
Clip path composition is an only composition type who doesn't ignore blend method.
Clip path is a combination of composition approach and blend approach using compute shader
2024-09-30 15:35:10 +09:00
Hermet Park
699063625b lottie: ++scene rendering optimization
Apply LottieRenderPooler to path/rect/ellipse/polystar.

This enhances the animation performance: ~10%
2024-09-30 15:34:57 +09:00
Hermet Park
7e9febf2c6 examples: ++exception handling
Added handling for engine initialization failure.
2024-09-30 15:34:48 +09:00
Mira Grudzinska
ea7f8e6190 sw_engine: grayscale image support++ 2024-09-30 15:33:57 +09:00
Hermet Park
ba3d2b77a1 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-09-30 15:33:49 +09:00
Hermet Park
cf0d04a9ae infra: updated ios arm64 build 2024-09-30 15:32:09 +09:00
Hermet Park
ec00238aed examples: added LottieExpressions 2024-09-30 15:31:55 +09:00
Hermet Park
e27b8ddf25 lottie/parser: tiny binary size reduction 2024-09-30 15:30:47 +09:00
Mira Grudzinska
774e4f5156 lottie: support 'direction' in ellipses 2024-09-30 15:30:29 +09:00
Mira Grudzinska
177bae539c lottie: remove unnecessary cast 2024-09-30 15:30:18 +09:00
Hermet Park
3d9f7ebbc3 examples: updated lottie samples 2024-09-30 15:30:12 +09:00
Hermet Park
12b7c634f7 lottie: clarify shape direction.
There are only two options clockwise or counter-clockwise.
2024-09-30 15:29:22 +09:00
Mira Grudzinska
bba48a8084 lottie: apply direction to rect 2024-09-30 15:29:22 +09:00
Hermet Park
f49bf9e775 examples: added svg samples 2024-09-30 15:29:22 +09:00
Hermet Park
43a5bf2fce lottie: ++ scene composing optimization
retain resuable layer solid paint during animation.
2024-09-30 15:29:22 +09:00
Hermet Park
3adee7238c lottie: ++ scene composing optimization
retain reusable precomp clipper shapes during animation.
2024-09-30 15:29:22 +09:00
Sergii Liebodkin
f7728a8b7a wg_engine: Viewport support
[issues 1479: Viewport](#1479)

Supports viewport settings and rectangular clip path.
Scissors cliping used as a way to clip viewport
2024-09-30 15:29:22 +09:00
Hermet Park
192135835f lottie: ++memory access stability
Internal matrix can be null.
This update prevents such cases by using a safer API.
2024-09-30 15:29:07 +09:00
Jinny You
0953d000c1 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-09-30 15:28:24 +09:00
Hermet Park
12d0504a23 common: replace the round() with nearbyint()
nearbyint() is 2x faster than round() in our local test.
2024-09-30 15:24:39 +09:00
Hermet Park
f4cd6b8d8c sw_engine: code refactoring.
just renamed internal name shorter.
2024-09-30 15:23:21 +09:00
Hermet Park
8e6e224284 sw_engine: ++rle optimization
Reduction memory copy by pushing span data into rle immediately.
2024-09-30 15:23:15 +09:00
Mira Grudzinska
8e78745e2e 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-09-30 15:23:08 +09:00
Hermet Park
ef75fbcbb9 math: ++missing exceptions 2024-09-30 15:22:59 +09:00
Mira Grudzinska
0dc8b8cde7 sw_engine: fix masked translucent rect 2024-09-30 15:22:52 +09:00
Hermet Park
4f58124754 common/math: code refactoring
- migrate tvgLine to tvgMath
- associate line functions with classes.
2024-09-30 15:22:46 +09:00
Hermet Park
c9d1df3957 common/math: code refactoring
Replaced the prefix "math" with "tvg" namespace.
2024-09-30 15:22:38 +09:00
Hermet Park
d3a900701f 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-09-30 15:21:27 +09:00