Commit graph

2507 commits

Author SHA1 Message Date
Hermet Park
6c8ab8fe49 Update CODEOWNERS 2024-02-07 12:44:48 +09:00
Hermet Park
9fd5385689 Update CONTRIBUTING.md 2024-02-07 12:44:37 +09:00
Junsu Choi
df4f93e79f loader/webp: Support static webp loader
Built to libwebp code in to support the static option of webp loader.
Code from :https://github.com/jacklicn/libwebp

This forking version only contains the minimal webp decoding feature.

Binary Size: +68kb

Co-authored-by: Hermet Park <hermet@lottiefiles.com>

issue: https://github.com/thorvg/thorvg/issues/1427
2024-02-07 10:58:25 +09:00
JunsuChoi
509181bf2a infra/window: Remove version fix of meson
Version 0.58 find missing libraries and causes an error.
(ex: libwebp 1.0).
There is no need to fix the current version, so always use the latest version.
2024-02-06 10:52:58 +09:00
Hermet Park
9e69089524 renderer/canvas: Optimize logic by removing paint verification.
Allow direct updates to the paint object without prior validation.
The verification process is deemed inefficient;
users are expected to ensure the paint is updated using a canvas
that contains it.

This might break the backward compatibility.
2024-02-06 01:30:19 +09:00
Hermet Park
f03a3a87ff sw_engine: Improve image up-scaler quality
Adjusted the sampling position basis by -0.5 pixel
to enhance edge line interpolation quality.

This change addresses an issue with the image up-scaling process,
resulting in clearer and more accurate visuals.

issue: https://github.com/thorvg/thorvg/issues/1949
2024-02-05 22:21:28 +09:00
Hermet Park
85c858cbda renderer: ensure canvas rendering continues despite invalid scene parts
Previously, the logic was set to halt rendering when any part of the paints,
particularly bitmap-based images, failed to render.

This update modifies the behavior to continue drawing the scene,
allowing for the successful rendering of other elements.

issue: https://github.com/thorvg/thorvg/issues/1951
2024-02-05 20:58:51 +09:00
RuiwenTang
3f9b0eff22 gl_engine: enhance the tessellation algorithm
* merge vertices that are close enough before tessellation
* append return branch in tessellation to prevent dead loop caused by floating point precision
2024-02-05 18:41:37 +09:00
Hermet Park
a3e2189afa doc: updated dependencies section. 2024-02-05 11:11:55 +09:00
JunsuChoi
2d0c10e27f examples/picture/svg: Add PictureSvg example
This is the simplest example using tvg::Picture's SVG loader.
2024-02-05 10:53:42 +09:00
Sergii Liebodkin
e1f6572bde wg_engine: clenup shader sources
Remove unused composition/blending shader sources
2024-02-05 10:46:01 +09:00
Hermet Park
f8b1564d61 renderer: ++todo 2024-02-04 17:53:25 +09:00
Hermet Park
0b0ff3fc0f infra: removed old tvg packs
TVG picture binaries were maintained for compatibility checks.
These are generally not used by ThorVG developers.

Migrated those binaries to another repository to streamline
the ThorVG main repository.
2024-02-04 11:40:49 +09:00
Hermet Park
865f87d15e infra: remove unused resources.
thorvg will revisit this later.
2024-02-04 11:40:49 +09:00
Hermet Park
9a6eff8ce2 examples: updated DirectUpdate sample
Properly guide a sample usage to guarantee the sync call.
2024-02-02 17:59:57 +09:00
Hermet Park
a65d3ae37a lottie/parser: shutdown a compiler warning.
corrected a data type.
2024-02-02 17:59:47 +09:00
Hermet Park
21252632b3 lottie: fixed a parsing error in assets
An unused key in assets parsing corrupted the sequence.
This change now ensures they are tightly ignored.
2024-02-02 11:42:26 +09:00
Hermet Park
a2defaf694 lottie: fix a simple mistake. 2024-02-02 11:42:26 +09:00
Hermet Park
a1c43a9518 renderer: code refactoring.
removed unnused return value.
2024-02-02 03:02:56 +09:00
Hermet Park
46b26a07b3 renderer: destroy engines safely.
Introduced a reference count to destroy it safely.
2024-02-02 03:02:56 +09:00
Hermet Park
14048cbe19 renderer: revise the internal logic.
dispose of the resources at the end of the paint deletion.
This will help retain the resources of the retained paints
and reuse them after reconstructing the next scene.
2024-02-02 03:02:56 +09:00
Hermet Park
22b8b014e2 renderer: code refactoring.
replaced references with pointers to ensure consistency.
no logical changes.
2024-02-02 03:02:56 +09:00
Hermet Park
f006551f52 lottie: minor optimization.
remove an unnecessary scene in the lottie render tree.
2024-02-02 01:29:16 +09:00
Hermet Park
c89f6253bf lottie: compatibility++
retry image loading with the given candidates,
even if the suggested format is mismatched.
2024-02-01 12:14:42 +09:00
Sergii Liebodkin
6b6947f679 wg_engine: introduced blending
[issues 1479: blending](#1479)

Supported blend settings:

    Normal
    Add
    Screen
    Multiply
    Overlay
    Difference
    Exclusion
    SrcOver
    Darken
    Lighten
    ColorDodge
    ColorBurn
    HardLight
    SoftLight
2024-01-30 11:49:20 +09:00
Hermet Park
fb4ad7d239 lottie: corrected text height alignment issues.
enhanced support for a wider range of text use cases.
2024-01-30 10:34:12 +09:00
Hermet Park
5d02b3ac42 lottie: Fixed a font/glyph parsing error.
Previously, the Lottie parser expected a specific parsing order:
font followed by glyph, for optimal data processing.

However, since this order is not guaranteed,
we have revised the parsing logic to accommodate any order.
2024-01-30 10:34:12 +09:00
Hermet Park
e7a1e6e43c sw_engine: Address a corner case in trim path handling
This update fixes an issue where duplicated overlapping curves/lines,
when introduced as a single line.
That case overlapping command operation is take account for
the trim path's path-building process.

We now skip such cases to ensure the trim path functions correctly.

issue: https://github.com/thorvg/thorvg/issues/1939
2024-01-30 10:34:01 +09:00
JunsuChoi
b55c1415c0 loader/svg: Fix zero check of arc's rx and ry
Please refer to the specifications.
https://www.w3.org/TR/SVG/paths.html#ArcOutOfRangeParameters

If either rx or ry is 0, then this arc is treated as a straight line
segment(a "lineto") joining the endpoints.
2024-01-29 09:54:03 +02:00
JunsuChoi
6015e2eb32 loader/svg: Apply specification of out-of-range elliptical arc parameters
The three specifications below apply.

Specification: https://www.w3.org/TR/SVG/paths.html#ArcOutOfRangeParameters

-
If the endpoint (x, y) of the segment is identical to the current point
(e.g., the endpoint of the previous segment),
then this is equivalent to omitting the elliptical arc segment entirely.

-
If either rx or ry is 0, then this arc is treated
as a straight line segment(a "lineto") joining the endpoints.

-
If either rx or ry have negative signs, these are dropped;
the absolute value is used instead.
2024-01-29 09:54:03 +02:00
Hermet Park
823b945666 lottie: rectified scene building Logic
resolved a corner case where assets were being attached
multiple times during scene building. This issue was causing
a significant performence drop in image animation
in certain scenarios.
2024-01-25 02:06:14 +09:00
Hermet Park
be809b2103 lottie: fixed an issue with missing stroke drawing
Resolved a problem where the context was missing in scenarios
involving an overlapped stroke drawing.

issue: https://github.com/thorvg/thorvg/issues/1933
2024-01-24 13:24:32 +09:00
Hermet Park
2f7bfb6c8c renderer/shape: rectified the round rectangle start position.
adjusted the starting position of the rounded rectangle to 90 degrees
to ensure compatibility with the Lottie trim path effect.

This modification follows the earlier circle correction applied to the rectangle.

issue: https://github.com/thorvg/thorvg/issues/1933
2024-01-24 13:24:32 +09:00
Hermet Park
04121ad2be sw_engine: Rectified dash line drawing issue.
Omit the dash line when its length falls below a minimal threshold.
This threshold is set to less than 0.0001 times the pixel size.
2024-01-24 10:17:38 +09:00
Sergii Liebodkin
4f528d45f5
wg_engine: introduced compute pipeline entities
introduces posibility to create compute pipelines
does not affect functionality
2024-01-23 18:08:26 +09:00
Hermet Park
adf12801c9 examples/gif: revise the sample.
60fps takes a bit long time for our daily testing.
Removed it for the speed.
2024-01-23 10:34:20 +09:00
Hermet Park
67d8d9f36c svg_loader: code refactoring
removed duplicate matrix multiply function.
2024-01-22 19:03:59 +09:00
Mew Pur Pur
de00104566
svg_loader: Add missing implementation of skewX and skewY in transform-list 2024-01-22 18:52:37 +09:00
Hermet Park
4678372c22 Update README.md
updated sample code
2024-01-19 21:52:50 +09:00
Hermet Park
95e424eb5b sw_engine: fix a regression bug
invalidate cached compositors when target size is changed.
compositors must be re-initialized with a new size.

regression bug by ca3c1fc1b9
2024-01-19 17:37:32 +09:00
Hermet Park
e8a319268a sw_engine: retain the compositor cache memory
The compositor memory is likely to be reused in the next frame.
To enhance performance, it is advisable to retain this memory by default.

We may consider introducing a cache policy interface in the Initializer.
This would allow users to manage the Canvas memory more effectively.

Anyhow, this improves the Lottie example performance by 10%
2024-01-18 23:44:51 +09:00
RuiwenTang
c8e0c48636 gl_engine: append stencil attachment in GLRenderTarget
Plans to use stencil to test support for path clipping and complex path rendering
When the tessellation algorithm cannot handle it.
2024-01-18 21:11:58 +09:00
Hermet Park
6fee4f44d4 sw_engine: tweak the image down-scaler.
Adjust the sampling count according to the scale ratio.

This significantly improves performance
while making it hard to recognize any loss in image quality.

Lottie example performance has improved by 15%.
2024-01-18 21:10:22 +09:00
Hermet Park
bcab78e7d6 examples: updated scale up/down 2024-01-18 21:10:22 +09:00
Sergii Liebodkin
edd8756b73 wg_engine: introduced scene opacity
[issues 1479: opacity](#1479)

Supported opacity value for scene

Usage example:

    //Create a Scene
    auto scene = tvg::Scene::gen();
    scene->opacity(100);

    //Prepare Circle
    auto shape1 = tvg::Shape::gen();
    shape1->appendCircle(400, 400, 250, 250);
    shape1->fill(255, 255, 0);
    shape1->opacity(100);
    scene->push(std::move(shape1));

    //Round rectangle
    auto shape2 = tvg::Shape::gen();
    shape2->appendRect(450, 100, 200, 200, 50, 50);
    shape2->fill(0, 255, 0);
    shape2->strokeWidth(10);
    shape2->strokeFill(255, 255, 255);
    scene->push(std::move(shape2));

    canvas->push(std::move(scene));
2024-01-18 18:00:08 +09:00
Hermet Park
6ba89df805 sw_engine: removed redundant logic.
Basically, sw_engine uses a desinated memory pool,
this reservation is not so effective.
2024-01-18 17:33:48 +09:00
Hermet Park
6944633f41 lottie: Improve feature coverage by correctly handling XOR shapes
XOR when the shape's direction property is set to a value of 2.
Currently, the direction property is expected to have
either 1 for clockwise or 3 for counterclockwise orientation.

Just found out the number 2 use-case...
2024-01-18 13:34:14 +09:00
Hermet Park
27b49dcf45 examples: revise the usage.
Remove the canvas buffer clear call
when the solid bg is introduced.
2024-01-18 13:34:14 +09:00
Hermet Park
71cc7c2e30 lottie: Fixed the issue with gradient filling.
Previously, multiple gradients within a single group
couldn't be accounted for during rendering.

This fix addresses the scenario by fragmenting the rendering context.
2024-01-18 13:34:14 +09:00
Hermet Park
0335742864 lottie: properly capture the stroking context
Each group must determine the stroking rendering contexts
and assess whether context switching has occurred.

Migrate the sequence from the root layer to all groups.
2024-01-18 13:34:14 +09:00