Commit graph

437 commits

Author SHA1 Message Date
Sergii Liebodkin
cff78dc067 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-09-30 15:48:18 +09:00
Sergii Liebodkin
0004887225 wg_engine: introduce simultaneous flag support for strokes trimming
https://github.com/thorvg/thorvg/issues/2435
2024-09-30 15:48:18 +09:00
Mira Grudzinska
e21c225b7f common: fix trimming
By mistake > was used instead of >=.
The issue was observed for trim when
the trim length was exactly zero.
2024-09-30 15:48:18 +09:00
Mira Grudzinska
d29a3d754b 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-09-30 15:48:18 +09:00
Hermet Park
ecabdc5ebc renderer: code refactoring
Replaced the transformation with
a strong associated data field.

This helps to reduce the binary size (-1k).
2024-09-30 15:39:52 +09:00
Hermet Park
157e873e83 common: code refactoring
Trimming the transform data pass,
from RenderTransform to Matrix.

No logical changes.
2024-09-30 15:39:46 +09:00
Mira Grudzinska
7274b3d601 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-09-30 15:39:20 +09:00
Hermet Park
dfc6e67c6b 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-09-30 15:38:23 +09:00
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
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
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
e4fb0ec383 sw_engine: ++alpha blending operation.
Reduce instructions, improving its performance by ~15%
2024-09-30 15:35:52 +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
Mira Grudzinska
ea7f8e6190 sw_engine: grayscale image support++ 2024-09-30 15:33:57 +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
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
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
Sergii Liebodkin
aae722e7ba wg_engine: fix masking methods support
See Masking, InvMasking, LumaMasking, InvLumaMasking, MaskingMethods examples

sw/webgpu
2024-09-30 15:21:20 +09:00
Hermet Park
ff06885e2f renderer: ++optimization
skip locking if the thread number is 0.
2024-09-30 15:21:07 +09:00
RuiwenTang
3eb2e66fe0 gl_engine: fix aliasing in gradient rendering 2024-09-30 15:11:40 +09:00
RuiwenTang
b71ad8adff gl_engine: make sure solid color not overwrite gradient fill
If there are both gradient colors and solid colors
the gradient color is used first for rendering
2024-09-30 12:59:32 +09:00
Hermet Park
9b2468ed5b renderer: rectified render update flags.
Image update flag has been missed, when the image
is copied with a surface. This fixed it.

Also try to skip update if any properties were not changed.
2024-09-30 12:57:22 +09:00
Hermet Park
78ece5befd renderer: Rectified the paint transforms.
This corrects the return value to Result::InsufficientCondition
when a custom transform is applied.

Additionally, unnecessary x and y member fields have been removed.
2024-09-30 12:57:14 +09:00
Hermet Park
b00c55169e wg_engine: code refactoring
- apply thorvg compact coding style.
- separate private / public methods designated in sectors.
2024-09-30 12:56:51 +09:00
Sergii Liebodkin
a49a15af75 wg_engine: fix dispose render data in MT environment
Store desposed object in MT-safe list and then despose objects in sync stage
2024-09-30 12:56:45 +09:00
Hermet Park
4345d6b8a5 API: revise the APIs.
deprecate the `identifier()` APIs by replacing them with `type()`.

ThorVG is going to introduce an instance `id()`,
and this could be confused with the `identifier()` methods.

with this new type() method can reduce the memory size
by removing unncessary type data.

New Experimental C APIs:
- enum Tvg_Type
- Tvg_Result tvg_paint_get_type(const Tvg_Paint* paint, Tvg_Type* type)
- Tvg_Result tvg_gradient_get_type(const Tvg_Gradient* grad, Tvg_Type* type)

New Experimental C++ APIs:
- Type Paint::type() const
- Type Fill::type() const
- Type LinearGradient::type() const
- Type RadialGradient::type() const
- Type Shape::type() const
- Type Scene::type() const
- Type Picture::type() const
- Type Text::type() const

Deprecated C APIs:
- enum Tvg_Identifier
- Tvg_Result tvg_paint_get_identifier(const Tvg_Paint* paint, Tvg_Identifier* identifier)
- Tvg_Result tvg_gradient_get_identifier(const Tvg_Gradient* grad, Tvg_Identifier* identifier)

Deprecated C++ APIs:
- enum class Type
- uint32_t Paint::identifier() const
- uint32_t Fill::identifier() const
- static uint32_t Picture::identifier()
- static uint32_t Scene::identifier()
- static uint32_t Shape::identifier()
- static uint32_t LinearGradient:identifier()
- static uint32_T RadialGradient::identfier()

Removed Experimental APIs:
- static uint32_t Text::identifier()

issue: https://github.com/thorvg/thorvg/issues/1372
2024-09-30 12:55:16 +09:00
Hermet Park
bc8effa836 gl_engine: --deprecated warnings on macOS
macOS has officially deprecated OpenGL.
shutdown the warnings to avoid be side-tracked.
2024-09-30 12:53:24 +09:00
RuiwenTang
4a1a586be9 gl_engine: fix memory leak when rendering image 2024-09-30 12:53:16 +09:00
Hermet Park
3dcc22309d gl_engine/renderer: code clean up
separate private / public methods designated in sectors.

no logical changes.
2024-09-30 12:53:08 +09:00
Hermet Park
f22afaefc2 gl_engine: ++thread safety
The `dispose()` method can be called on a worker thread.
GL resources are released on `sync()`, ensuring guaranteed thread safety.
2024-09-30 12:52:38 +09:00
Sergii Liebodkin
e27ce23d4b wg_engine: fix blend methods support
Full review of blending support.
Support Solid color, Gradient fill and Image blending workflows

See Blending, SceneBlending, Opacity examples
2024-09-30 12:51:02 +09:00
RuiwenTang
35d168db9e gl_engine: support simple hairline stroke rendering
Reduce alpha if stroke width is too thin to mock hairline rendering
2024-09-30 12:50:43 +09:00
RuiwenTang
338c75ca3a gl_engine: optimize off-screen rendering
Performing a full-screen RenderPass resolve is too expensive.
Because most composite cases only require a small area to be rendered off-screen.
To improve performance, use the bounds of the Geometry for off-screen rendering whenever possible
2024-09-30 12:50:17 +09:00
Hermet Park
ce50165103 common: Fix a compilation failure on VS 2017
issue: https://github.com/thorvg/thorvg/issues/2512
2024-09-30 12:49:06 +09:00
Sergii Liebodkin
21286f679d wg_engine: fix scene opacity usage
Changed blend equation to make it the same as for referenced sw renderer.
2024-09-30 12:48:58 +09:00
Hermet Park
3390ff21fc sw_engine: support the grayscale scaled-image drawing 2024-09-30 12:46:56 +09:00
Mira Grudzinska
ceae547062 sw_engine: fix aa
For shapes with a stroke that has opacity, anti-aliasing
should be applied to a fill.
The use of a transparent gradient stroke will also be handled
correctly.
2024-09-30 12:45:40 +09:00
Hermet Park
7b79f37dd2 api: ++description
issue: https://github.com/thorvg/thorvg/issues/2494
2024-09-30 12:45:29 +09:00
Hermet Park
74cd0ba0e7 common: code refactoring
replaced min/max with the standard library
2024-09-30 12:45:14 +09:00