Commit graph

3038 commits

Author SHA1 Message Date
Hermet Park
2edb3abbfb lottie/expressions: add missing expressions property updates
apply expressions to separate x/y transform coordinates.
2024-08-01 19:53:49 +09:00
Mira Grudzinska
58797ffafd sw_engine: handle grad edge cases
For a linear gradient defined by identical start and end
points, and for a radial gradient with a radius of 0,
the rendered shape should have the color of the last
specified color stop.
The documentation has been updated accordingly.

@Issue: https://github.com/thorvg/thorvg/issues/2582
2024-08-01 14:25:29 +09:00
Sergii Liebodkin
6cd745dd2e wg_engine: emscripten and browser support
[issues 2410: emscripten support](https://github.com/thorvg/thorvg/issues/2410)
- Research and prototype the Emscripten build with WebGPU.

meson setup script:
   meson setup builddir -Ddefault_library=static -Dloaders=all -Dsavers="all" -Dbindings="wasm_beta" -Dengines="wg_beta" --cross-file ./cross/wasm_webgpu.txt
2024-08-01 14:20:08 +09:00
Hermet Park
b636590bf4 lottie: remove useless condition check.
lottie is always animatable.
2024-08-01 12:57:35 +09:00
Sergii Liebodkin
25d1fc8bee
wg_engine: introduce simultaneous flag support for strokes trimming
https://github.com/thorvg/thorvg/issues/2435
2024-08-01 12:07:20 +09:00
Mira Grudzinska
21a21a63ab common: fix trimming
By mistake > was used instead of >=.
The issue was observed for trim when
the trim length was exactly zero.
2024-08-01 12:01:27 +09:00
Mira Grudzinska
7c87d8e632 common: move&fix trimming wrapping logic
The logic of interpretation of trimming start and
end values has been moved to the sw_engine,
so the values provided by the user are not modified.
No logical changes in the interpretation alg.

For pairs of trim's start/end values where the distance
between begin and end is >= 1, the entire stroke should
be drawn, but instead, nothing or only part is drawn. Fixed.

Stroke trim docs fixed.
2024-07-31 14:32:04 +02:00
Hermet Park
c257994d5c lottie/expressions: feature enhancement
added groupIndex() support
added property (ix) value support
2024-07-31 18:26:42 +09:00
Hermet Park
397e33b158 lottie: code refactoring
Access its type from a property instance,
through coherent data structure.
2024-07-31 18:26:42 +09:00
Łukasz Pomietło
dc0029a7e1
ttf_loader: Basic support for composite glyphs loading (#2600)
Adds the ability to load some composite glyphs and prevents an error when a composite glyph is used.

Implementation based on ttf glyf table documentation: https://learn.microsoft.com/en-us/typography/opentype/spec/glyf

There are still some missing features like scaling, parent glyph point based positioning etc. I think this is a topic for future work. Howerever, it looks like implemented features are enough for utf-8 latin subset in major fonts.

issue: #2599
2024-07-31 12:51:22 +09:00
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
c4d89d0983 common: code refactoring
Trimming the transform data pass,
from RenderTransform to Matrix.

No logical changes.
2024-07-29 12:16:58 +09:00
Hermet Park
71a180a9be
Update CODEOWNERS 2024-07-29 00:43:26 +09:00
Hermet Park
f6b30c537f
Update CODEOWNERS 2024-07-29 00:32:45 +09:00
Mira Grudzinska
dcc8a1d042 sw_engine: fix radial coefficients calculations
In the Taylor series expansion, there was a missing
division by 2! in the term with the second derivative.

@Issue: https://github.com/thorvg/thorvg/issues/2530
2024-07-28 00:14:15 +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
f4364ddb86 sw_engine: rectified the image raster return value.
Return the raster image as a success unless
it fails due to any problematic condition.

The changed cases are just invisible condition
of the images.
2024-07-26 16:03:55 +09:00
Hermet Park
b388bf06d5 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-07-25 20:12:32 +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
Mira Grudzinska
828f8e0767 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-07-23 22:07:50 +09:00
Hermet Park
c7ae3ae2af 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-07-23 17:09:26 +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
de72161087 example: merge Path & PathCopy 2024-07-21 15:05:07 +09:00
Hermet Park
db889e1835 renderer: quick skip rendering if the opacity is zero
This also resolves a corner case bug introduced by
lottie render pooling: f06127ab93
2024-07-21 15:05:07 +09:00
Hermet Park
a47839a40b sw_engine: hotfix simd build breaks
regression by 837cf32bcb
2024-07-19 23:07:31 +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
65fe1cb465 examples: updated lottie samples 2024-07-19 15:19:36 +09:00
Hermet Park
9e7d8b37ff examples: added more expressions samples 2024-07-18 22:14:05 +09:00
Hermet Park
16cb1020ac lottie/expressions: added a missing polystar property build. 2024-07-18 20:46:06 +09:00
Hermet Park
c825c2f929 sw_engine: ++alpha blending operation.
Reduce instructions, improving its performance by ~15%
2024-07-18 20:45:54 +09:00
Mira Grudzinska
83439f34e1 tests: version api tests 2024-07-18 12:47:58 +09:00
Mira Grudzinska
8125d66da9 capi: the version api binding 2024-07-18 12:47:58 +09:00
Mira Grudzinska
17e0bcd332 common: version api introduced
@Issue: https://github.com/thorvg/thorvg/issues/2543
2024-07-18 12:47:58 +09:00
Sergii Liebodkin
f4e1c13a79 wg_engine: fix cubic generation artifacts (GradientStroke example)
[GradientStroke](https://github.com/thorvg/thorvg/issues/2435) example

More accurate coefitient computation
2024-07-17 12:54:19 +09:00
Sergii Liebodkin
4cc132ad47 wg_engine: fix fill spread artifacts
[issues 2435: ](FillSpread) example

Fixed range selector edged cases
2024-07-17 12:51:06 +09:00
Hermet Park
71ba9ab7cf renderer: ++null check
fixed a Duplicate example crash, regression by:
f06127ab93
2024-07-16 00:47:03 +09:00
Sergii Liebodkin
2c948a33d3 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-07-16 00:01:47 +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
350f7a4357 examples: ++exception handling
Added handling for engine initialization failure.
2024-07-14 12:04:31 +09:00
Mira Grudzinska
d42c10301e sw_engine: grayscale image support++ 2024-07-14 11:47:29 +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
bcc2f5008c infra: updated ios arm64 build 2024-07-13 15:30:20 +09:00
Hermet Park
b915455e89 examples: added LottieExpressions 2024-07-12 18:57:10 +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
ad2b6f6d51 examples: updated lottie samples 2024-07-12 00:39:31 +09:00