Commit graph

3783 commits

Author SHA1 Message Date
Hermet Park
cc72eda465 sw_engine: unify RenderRegion and SwBBox
refactored for smoother data flow through the rendering pipeline.
2025-05-28 11:41:52 +09:00
Hermet Park
8a35f02105 renderer/engines: redesigned RenderRegion property layout
redefiend properties so that min/max are prioritized,
as they are accessed more frequently than pos/size
during rendering calculations.

also introduced miscellaneous functions to improve usability.
2025-05-28 11:41:52 +09:00
Hermet Park
04b7bb4f25 renderer: allow empty content during canvas rendering
Some checks are pending
Android / build_x86_64 (push) Waiting to run
Android / build_aarch64 (push) Waiting to run
iOS / build_x86_64 (push) Waiting to run
iOS / build_arm64 (push) Waiting to run
macOS / build (push) Waiting to run
macOS / compact_test (push) Waiting to run
macOS / unit_test (push) Waiting to run
Ubuntu / build (push) Waiting to run
Ubuntu / compact_test (push) Waiting to run
Ubuntu / unit_test (push) Waiting to run
Windows / build (push) Waiting to run
Windows / compact_test (push) Waiting to run
Windows / unit_test (push) Waiting to run
This allow more generous handling of failure cases for invalid content,
thorvg can draw other successful contents.

Now, only raster engines can return fail cases in the picture.
2025-05-28 00:48:48 +09:00
Hermet Park
b221eed7fa renderer: chores 2025-05-27 17:58:10 +09:00
Mira Grudzinska
211fee73e2 lottie: fix precomposition with masking
Some checks failed
Android / build_x86_64 (push) Has been cancelled
Android / build_aarch64 (push) Has been cancelled
iOS / build_x86_64 (push) Has been cancelled
iOS / build_arm64 (push) Has been cancelled
macOS / build (push) Has been cancelled
macOS / compact_test (push) Has been cancelled
macOS / unit_test (push) Has been cancelled
Ubuntu / build (push) Has been cancelled
Ubuntu / compact_test (push) Has been cancelled
Ubuntu / unit_test (push) Has been cancelled
Windows / build (push) Has been cancelled
Windows / compact_test (push) Has been cancelled
Windows / unit_test (push) Has been cancelled
A precomposition layer is clipped to its viewport.
If the same layer also had a mask that was optimized
using clipping, this clip was unintentionally overridden
by the viewport clipping. This conflict is now fixed.
2025-05-26 19:26:45 +09:00
Sergii Liebodkin
55847bdcb3 gl_engine: fix memoty leak on target resize
Some checks are pending
Android / build_x86_64 (push) Waiting to run
Android / build_aarch64 (push) Waiting to run
iOS / build_x86_64 (push) Waiting to run
iOS / build_arm64 (push) Waiting to run
macOS / build (push) Waiting to run
macOS / compact_test (push) Waiting to run
macOS / unit_test (push) Waiting to run
Ubuntu / build (push) Waiting to run
Ubuntu / compact_test (push) Waiting to run
Ubuntu / unit_test (push) Waiting to run
Windows / build (push) Waiting to run
Windows / compact_test (push) Waiting to run
Windows / unit_test (push) Waiting to run
We must to remove offscreen render buffers during removing render target

https://github.com/thorvg/thorvg/issues/3210
2025-05-25 23:04:12 +09:00
Hermet Park
32c38041db sw_engine: added diagnostics for potential issues
Some checks failed
Android / build_x86_64 (push) Has been cancelled
Android / build_aarch64 (push) Has been cancelled
iOS / build_x86_64 (push) Has been cancelled
iOS / build_arm64 (push) Has been cancelled
macOS / build (push) Has been cancelled
macOS / compact_test (push) Has been cancelled
macOS / unit_test (push) Has been cancelled
Ubuntu / build (push) Has been cancelled
Ubuntu / compact_test (push) Has been cancelled
Ubuntu / unit_test (push) Has been cancelled
Windows / build (push) Has been cancelled
Windows / compact_test (push) Has been cancelled
Windows / unit_test (push) Has been cancelled
2025-05-22 16:12:42 +09:00
Mira Grudzinska
1b72113fcc sw_engine: fix too small memory alloc for spans
In some clipping cases, the memory allocated for storing spans
was too small. As a result, the entire clipped area might not
have been rendered.
This has been resolved by adding an experimental factor to increase
the size of allocated memory.

@issue: https://github.com/thorvg/thorvg/issues/3461
2025-05-22 16:03:04 +09:00
Hermet Park
1d0973cdf0 wasm: enable software only it's valid 2025-05-22 15:34:58 +09:00
Hermet Park
e01ccb5db9 sw_engine: handle an exception ASAP
Some checks are pending
Android / build_x86_64 (push) Waiting to run
Android / build_aarch64 (push) Waiting to run
iOS / build_x86_64 (push) Waiting to run
iOS / build_arm64 (push) Waiting to run
macOS / build (push) Waiting to run
macOS / compact_test (push) Waiting to run
macOS / unit_test (push) Waiting to run
Ubuntu / build (push) Waiting to run
Ubuntu / compact_test (push) Waiting to run
Ubuntu / unit_test (push) Waiting to run
Windows / build (push) Waiting to run
Windows / compact_test (push) Waiting to run
Windows / unit_test (push) Waiting to run
2025-05-21 17:30:32 +09:00
JunsuChoi
c41b2c2a1c svg_loader: Fix <stop> being registered in closed latestGradient
Some checks are pending
Android / build_x86_64 (push) Waiting to run
Android / build_aarch64 (push) Waiting to run
iOS / build_x86_64 (push) Waiting to run
iOS / build_arm64 (push) Waiting to run
macOS / build (push) Waiting to run
macOS / compact_test (push) Waiting to run
macOS / unit_test (push) Waiting to run
Ubuntu / build (push) Waiting to run
Ubuntu / compact_test (push) Waiting to run
Ubuntu / unit_test (push) Waiting to run
Windows / build (push) Waiting to run
Windows / compact_test (push) Waiting to run
Windows / unit_test (push) Waiting to run
If stop is declared immediately after Gradient is closed, the stop is registered in latestGradient.
Change latestGradient to a Stack and add a stop only to the last added gradient.
When that gradient is closed, no more stops should be registered for that gradient.
And gradients do not allow nested declarations, so only the earliest declared Gradient is valid.
2025-05-21 11:41:03 +09:00
Benson Muite
633bcd3176 tools/lottie2gif: typo fix
Some checks failed
Android / build_x86_64 (push) Has been cancelled
Android / build_aarch64 (push) Has been cancelled
iOS / build_x86_64 (push) Has been cancelled
iOS / build_arm64 (push) Has been cancelled
macOS / build (push) Has been cancelled
macOS / compact_test (push) Has been cancelled
macOS / unit_test (push) Has been cancelled
Ubuntu / build (push) Has been cancelled
Ubuntu / compact_test (push) Has been cancelled
Ubuntu / unit_test (push) Has been cancelled
Windows / build (push) Has been cancelled
Windows / compact_test (push) Has been cancelled
Windows / unit_test (push) Has been cancelled
2025-05-16 16:05:18 +09:00
Hermet Park
e98b87892b gl_engine: revert some wrong change
Some checks are pending
Android / build_x86_64 (push) Waiting to run
Android / build_aarch64 (push) Waiting to run
iOS / build_x86_64 (push) Waiting to run
iOS / build_arm64 (push) Waiting to run
macOS / build (push) Waiting to run
macOS / compact_test (push) Waiting to run
macOS / unit_test (push) Waiting to run
Ubuntu / build (push) Waiting to run
Ubuntu / compact_test (push) Waiting to run
Ubuntu / unit_test (push) Waiting to run
Windows / build (push) Waiting to run
Windows / compact_test (push) Waiting to run
Windows / unit_test (push) Waiting to run
my fault. signed value should be respected
from cd12618529
2025-05-16 02:08:25 +09:00
Hermet Park
97d96a7f8b
Update README.md
added deepwiki
2025-05-16 00:54:23 +09:00
Hermet Park
bace6b9e52 lottie: removed undesired embedded option.
Use local font by default and fall back if no glyphs exist.

Co-Authored-By: Mira Grudzinska <mira@lottiefiles.com>
2025-05-15 19:21:24 +09:00
Jinny You
1e692f223c lottie: handle time remapping with zero value correctly
The time remapping logic had an issue where animations with zero value "tm"(Time Remap) were not being processed correctly.

This was happening because the previous implementation only applied time remapping when the value was non-zero. (A zero-value Time Remap should be applied, but is ignored)

The fix changes the default time remap value to `-1.0` (since frame values cannot be negative) and applies time remapping when the value is 0.0 or greater. This ensures that zero value time remapping is properly processed.
2025-05-14 21:53:32 +09:00
Mira Grudzinska
6e41b44ea1 lottie: fix points calculation for rounded polygon
Added missing factor.

issue: https://github.com/thorvg/thorvg/issues/2629
2025-05-14 21:53:32 +09:00
Hermet Park
cd12618529 common/array: ++neat code
no logical changes
2025-05-14 21:53:32 +09:00
Hermet Park
7e8743e8fe wg_engine: ++exception handling 2025-05-13 16:28:01 +09:00
Hermet Park
5154e491cc wg_engine: ++optimal logic
avoid using initializer here.
2025-05-13 14:47:40 +09:00
Hermet Park
5ed719dcec sw_engine: code clean up
removed unnecesary parameters
2025-05-12 17:37:40 +09:00
Mira Grudzinska
97817bedfe lottie: support for firstMargin < 0 in text follow path
The first margin value shifts the starting point where the text
begins along the path. Now cases where firstMargin < 0 are handled,
for both closed and open paths.
2025-05-12 15:32:32 +09:00
Hermet Park
3fbb55440a renderer: ++engines safety
Added drawing exceptions when target is not properly ready.

Now, Canvas::update() Canvas::draw() will return InsufficientCondition
if the target has not been set beforehand.
2025-05-12 12:49:10 +09:00
Hermet Park
2524cdfee5 Update README.md 2025-05-09 12:51:57 +09:00
Hermet Park
4a5d0c84e8 examples: updated svg 2025-05-08 23:19:39 +09:00
Hermet Park
007879af02 gl_engine: code clean up++ 2025-05-08 22:56:16 +09:00
Hermet Park
df8d327ebb sw_engine: fixed a a regression bug during main dev
borker by 176573ff25
2025-05-08 22:56:16 +09:00
Mira Grudzinska
2e03fbd630 lottie: enhance parsing of position's SeparateCoords
The "s" key does not have to appear at the beginning
of the position block. Previously, such cases would
result in a parsing error — now they are handled correctly.
2025-05-08 19:30:08 +09:00
Hermet Park
0b77659136 infra: added opengl_es extra option for explicit selection
usages:
meson setup build -Dengines="gl"  //opengl
meson setup build -Dengines="gl" -Dextra="opengl_es"  //opengl es
2025-05-08 12:00:22 +03:00
Hermet Park
457b019ab4 gl_engine: --compiler warning on emsdk.
warning: variable length arrays in C++ are a Clang extension [-Wvla-cxx-extension]
2025-05-08 15:07:17 +09:00
RuiwenTang
ec26784266 gl_engine: dynamic load gl functions
no any 3rd-party libs, such as glfw or glad did not used
support windows, linux, macos and emsdk
only the actually used set of functions are loaded

Co-Authored-By: Sergii Liebodkin <sergii@lottiefiles.com>
Co-Authored-BY: Hermet Park <hermet@lottiefiles.com>

issue: https://github.com/thorvg/thorvg/issues/2453
2025-05-08 14:58:13 +09:00
Hermet Park
57adfbd499 lottie/parser: revise logic to handle exceptional cases more gracefully
- prioritize valid (positive) cases first
- continue parsing even when encountering parsing errors

Co-Authored-By: Mira Grudzinska <mira@lottiefiles.com>
2025-05-07 13:07:30 +02:00
Hermet Park
ae84708f9b sw_engine: fix regression in alpha handling
revert the alpha skip condition introduced in
commit 2990e72b23.

color values with alpha = 0 must be transformed to 0
to ensure correct intermediate composition results.
2025-05-07 10:54:08 +09:00
Mira Grudzinska
24fba7cfae lottie: add missing delimiter
\u0003 (\3) can be used as delimiter. Now handled correctly.
2025-05-07 10:53:32 +09:00
Benjamin
607c338799 capi: added missing mask methods
Adds missing mask methods to the capi
2025-05-07 10:44:06 +09:00
Benjamin
7c9bead192
wg_engine: fixed target surface update
Allows the target surface to be updated without forcing the size to changed.
2025-05-06 23:54:50 +09:00
Hermet Park
6008120d35 example: clean up++ 2025-05-06 11:43:47 +09:00
Hermet Park
4e64804839 examples: changed animatable window size.
just changed the size to another one for better showcase
since 800x800 is not preferred by intel arc chipset.
animations look stutter.
2025-05-06 11:02:30 +09:00
Hermet Park
aa1fa1e10a Revert "example: disable vsync of sw window for stability."
This reverts commit 2d695c4d46.

because of crashes on MacOS.
2025-05-06 10:16:40 +09:00
Hermet Park
2d695c4d46 example: disable vsync of sw window for stability.
SDL + software engine doesn't need the vsync?

Observed the rendering performance is noticeably unstable on Intel Arc chipsets
with certain window sizes (ie 800x800) when VSync is enabled on software-rendered windows.

This might be a workaround, or it could be an issue with the driver or SDL.

Either way, the SDL + software engine doesn't need VSync.
2025-05-05 17:36:57 +09:00
Benjamin
2990e72b23 sw_engine: ++raster color accuracy
Improves the color accuracy of rasterized images by skipping the pre-multiply step when the alpha is full opaque or fully transparent.

fixes: #3429
2025-05-05 15:23:30 +09:00
Jinny You
7bcee79077 gl_engine: replace std::string with C-style strings for portability
- C-style strings provide consistent binary interface for FFI
- Reduces potential issues where standard library is limited (e.g., WebAssembly, embedded systems)
2025-05-02 17:43:25 +09:00
Mira Grudzinska
7d4a5215dd lottie: fix stroke join for offset path
The incorrect line join used for OffsetPath was caused
by changes to the StrokeJoin enum values in commit
34d731fa94. During those
changes, the line join value for OffsetPath was mistakenly
not updated.
2025-05-02 14:19:04 +09:00
Benjamin
40453a4986 wg_engine: fixed target texture update
Allows the target texture to be updated without forcing the size to changed.
2025-05-01 10:56:15 +03:00
kkocdko
e0b8fcc93e infra/workflow: Release a source archive without dev resources 2025-04-30 14:12:14 +09:00
Sergii Liebodkin
37cffba620 wasm: fix thorvg wasm binding
Fixed initialization and termination of the engine in wasm binding
2025-04-24 22:28:37 +09:00
Sergii Liebodkin
e24c743ab3 wasm binding fixed for wg engine
fixed wrong logic in wg engine initialization process, where initializer return seccuss status in any case
2025-04-23 21:20:47 +09:00
Sergii Liebodkin
c77b6ec8db wg_engine: sync up to update the engine work to webgpu_native v22
Only minor changes required
Keeped compatibility with emsdk

issue: https://github.com/thorvg/thorvg/issues/2909
2025-04-23 21:20:47 +09:00
Hermet Park
bcfbc55af2
Update README.md 2025-04-23 18:36:44 +09:00
Mira Grudzinska
65c4e27437 svg_loader: fix clipping in use/symbol nodes
Clipping for the <use> node when a <symbol> was used,
was being overridden when 'overflowVisible' was 'true'
(the default value), which caused the 'clip-path' applied
to the <use> node to have no visible effect.
The clipping for the <use> node (without <symbol> node) was
transformed in an incorrect order, resulting in a visually
incorrect results.

@Issue: https://github.com/thorvg/thorvg/issues/3392
2025-04-23 15:59:51 +09:00