Commit graph

437 commits

Author SHA1 Message Date
Hermet Park
adf32b5628 sw_engine: --compiler warnings on MSYS2
comparison of integer expressions of different signedness: 'uint32_t' {aka 'unsigned int'} and 'long int' [-Wsign-compare]
2024-12-19 16:18:49 +01:00
Hermet Park
5c129472ff renderer: add a new scene effect type - Fill
Fill is used for overriding the scene content color
with a given fill information. It's yet an Experimental API.

issue: https://github.com/thorvg/thorvg/issues/2718
2024-12-19 16:12:28 +01:00
RuiwenTang
be538bacf7 gl_engine: Fix calculation error in path triming
Basically rewrite the PathTrim code, correct the Line and Bezier split
function calling.
Also the trim situation where start is greater than end can be handled correctly.
2024-12-19 13:27:23 +01:00
Hermet Park
36e5f68222 common: improve the rendering pipeline
enhanced the rendering composition target to better support features such as
alpha blending, blending, masking, post effects, and more.
This allows rasterizers to prepare the composition context with more precise control.

Additionally, resolved a crash in the software engine's post-effect process
caused by a buffer size mismatch during XY buffer flipping.

issue: https://github.com/thorvg/thorvg/issues/3009
issue: https://github.com/thorvg/thorvg/issues/2984
2024-12-05 13:13:42 +01:00
Dragoș Tiselice
c5a7d76109 sw_engine: replaced longjmp with returns
Since longjmp is not yet fully supported on Wasm (emscripten uses
JS to make the jumps and requires slow jumps), but also because
longjmp is hard to reason about, this patch replaces it with
return values. The logic stays exactly the same.
2024-12-05 12:20:12 +01:00
Hermet Park
52cf31a79d renderer: make the file io configurable
certain systems, may not support file I/O operations.
ThorVG should provide users with an option to configure
builds according to their requirements.

This ensures that file I/O calls are avoided,
preventing potential crashes.

Please use the meson '-Dfile=true/false' option for this.

Please note that "THORVG_FILE_IO_SUPPORT" might be expected
for your thorvg manual build.

issue: https://github.com/thorvg/thorvg/issues/3008
2024-12-02 12:03:15 +09:00
RuiwenTang
c0aab8c738 gl_engine: Fix the wrong bounds cause composition not correct
The bounds should allow negative origins, only zero width or height bounds needs discard.
2024-12-02 11:56:00 +09:00
RuiwenTang
14d66198d1 gl_engine: correct the stroke alpha calculation
The wrong matrix scale factor value caused the stroke alpha to be zero
when the matrix contains rotation.
2024-11-27 19:17:23 +09:00
Hermet Park
c6632d9ec0 portability: fixed a compile error on msys2 2024-11-27 19:17:23 +09:00
Hermet Park
f05ee1ca63 renderer/sw_engine: fix omitted alpha multiplication in the dropshadow effect
When a scene has a valid opacity, it must be multiplied with the
direct dropshadow image to ensure correct rendering.
2024-11-26 01:19:28 +09:00
Hermet Park
f0d4e7a7c7 sw_engine: hotfix range broken
hotfix for release. need to review the logic again
2024-11-26 01:17:36 +09:00
Hermet Park
e95f80c18f lottie: corrected drop-shadow handling
opacity value type should be float with range 0 ~ 256
2024-11-26 01:17:28 +09:00
Hermet Park
2324f6e75d renderer: support SceneEffect DropShadow
Apply a drop shadow effect with a Gaussian Blur filter.

API Addition:
 - enum class SceneEffect::DropShadow

Parameters:
 - color_R(int)[0 - 255]
 - color_G(int)[0 - 255]
 - color_B(int)[0 - 255]
 - opacity(int)[0 - 255]
 - angle(float)[0 - 360]
 - distance(float)
 - blur_sigma(float)[> 0]
 - quality(int)[0 - 100]

issue: https://github.com/thorvg/thorvg/issues/2718
2024-11-26 01:16:37 +09:00
lpogic
8daf0b7b94 renderer: Fix paint transformation on scene change
issue: https://github.com/thorvg/thorvg/issues/2958
2024-11-26 01:15:01 +09:00
Hermet Park
fcf080cc4e sw_engine: ++exceptional handling
issue: https://github.com/thorvg/thorvg/pull/2955
2024-11-18 23:39:38 +09:00
RuiwenTang
552d4bcee1 gl_engine: Fix repeated clip drawing causes performance degradation
The clips need to be cleared every time when shape update.
Otherwise, the increasing number of clips will hurt the performance.
2024-11-18 23:35:47 +09:00
RuiwenTang
e82830147c gl_engine: Support new radial gradient data struct and calculation
Change the shader and uniform struct to support new radial gradient.
The mathematical calculation comes from https://skia.org/docs/dev/design/conical/
2024-11-18 23:22:56 +09:00
RuiwenTang
159bf6949e gl_engine: Fix memory leak in the IndexBuffer object
The CPU buffer cache in the IndexBuffer object needs to be cleared, otherwise it will cause memory leaks and reduce performance per frame
2024-11-18 23:07:42 +09:00
RuiwenTang
8b37ec5d9c gl_engine: seperate the index buffer from vertex buffer
WebGL has a strict rule that does not allow the same GLBuffer
to be bound to both ARRAY_BUFFER and ELEMENT_ARRAY_BUFFER at the same time.
(https://registry.khronos.org/webgl/specs/latest/1.0/#5.14.5)

To support WebGL in the future, a separate GLBuffer is used to store index data.
2024-11-18 23:07:29 +09:00
Mira Grudzinska
ed90581a1f sw_engine: fix render fill region
Shape's bbox represents only fill's render region.
Render region of fill and stroke is stored in SwTask.
This was visible while rendering shapes with a stroke -
fill was to big.

@Issue: https://github.com/thorvg/thorvg/issues/2908

Co-Authored-By: Hermet Park <hermet@lottiefiles.com>
2024-11-01 17:38:09 +09:00
Mira Grudzinska
a851d1706e lottie: fix transformations in text range selector
Since the translate API was used while text updating,
the subsequent range selector transformations gets overwritten
when updating the shape (scale and rotate, adding another
translation will persist). This caused unexpected results.
Fixed by using the transform API when additional transformations
are needed - also fixes applying more than one range selector.
2024-11-01 17:37:44 +09:00
Hermet Park
33cfc16569 renderer: --shadow variable compiler warning 2024-11-01 17:31:16 +09:00
Hermet Park
cebc29c5ff renderer: hotfix a broken svg file sharing
Do not allow data sharing among same svg instances.
This should be addressed properly.
2024-11-01 17:30:51 +09:00
Hermet Park
4d8c0e9a64 sw_engine: corrected the blur feathering region.
issue: https://github.com/thorvg/thorvg/issues/2892
2024-11-01 17:30:42 +09:00
Hermet Park
3490f9b9ce png, gl_engine: fixed an wrong png colorspace.
issue: https://github.com/thorvg/thorvg/pull/2880
2024-10-22 00:41:42 +09:00
Hermet Park
ec62ca869f sw_engine: fixed linear gradient filling masking.
properly filtering alpha channel of the 8bits linear gradient
masking drawing.

issue: https://github.com/thorvg/thorvg/issues/2204
2024-10-22 00:41:31 +09:00
RuiwenTang
6427b81358 gl_engine: ignore masking alpha when calculate inv luma masking 2024-10-22 00:41:24 +09:00
Mira Grudzinska
fa49f14412 sw_engine: fix _rasterDirectImage
Since the source buffer is 32 bits, not 8 bits,
both alpha and inverse alpha need to be calculated.
2024-10-22 00:41:07 +09:00
RuiwenTang
e6aa41f7c4 gl_engine: implement path trim in tvgGlTessellator
Implement the path trim claculation, and handle the strokeTrim before
doing Path stroke.

issue: https://github.com/thorvg/thorvg/issues/2435
2024-10-22 00:40:41 +09:00
Hermet Park
719fbc9d64 sw_engine: rectify the blending method of grayscale fill
issue: https://github.com/thorvg/thorvg/issues/2842
issue: https://github.com/thorvg/thorvg/issues/2841
2024-10-22 00:40:15 +09:00
Mira Grudzinska
cb2a15528d sw_engine: split long lines to avoid overflow
@Issue: https://github.com/thorvg/thorvg/issues/2651
2024-10-22 00:39:14 +09:00
Hermet Park
43cdd4c7ec lottie: Fine-tune for post-processing effect.
reduce quality for the post-processing effect to
improve general performance, while fine-tuning the quality
for lower resolutions.
2024-10-22 00:39:06 +09:00
Hermet Park
75ae8bcc7b sw_engine: properly update the render region
shape render region should be aligned with the
current shape bbox. this could bring the compact size
of the rendering region even shapes are not drawable.
2024-10-22 00:38:58 +09:00
Sergii Liebodkin
7e1f756da0 wg_engine: fix picture memory leak
picture mesh data was not released
2024-10-04 10:00:38 +09:00
Hermet Park
0df35447b3 wg_engine: fixed resource leaks
issue: https://github.com/thorvg/thorvg/issues/2808
2024-10-04 00:34:16 +09:00
Mira Grudzinska
52def8dc27 sw_engine: ++exception handling
Prevent the infinite loop in the worst case

@Issue: https://github.com/thorvg/thorvg/issues/2651
2024-10-04 00:34:16 +09:00
Mira Grudzinska
03bbfd3183 sw_engine: ignore small cubics
During the stroke's outline calculation, the function
handling small cubics set all angles to zero. When
the cubic was small but not zero, this resulted in
incorrect outlines. Now such curves are ignored.

Co-Authored-By: Hermet Park <hermet@lottiefiles.com>

Issue: https://github.com/thorvg/thorvg/issues/2776
Issue: https://github.com/thorvg/thorvg/issues/2712
2024-10-03 21:42:14 +09:00
Hermet Park
aece166cb7 sw_engine: ++stability
cut the Bezier curve based on the number of points
and transform it into a straight line when it's very small.

issue: https://github.com/thorvg/thorvg/issues/2759
2024-10-03 19:02:26 +09:00
Hermet Park
bceedf081f sw_engine: fixed an uninitialized data access 2024-10-03 19:02:14 +09:00
Hermet Park
ee19380d50 tvg: updated binary with v0.15 tagging 2024-10-01 12:58:13 +09:00
RuiwenTang
c8a04a5337 gl_engine: implement darken and lighten mask method
Add new shader to support darken and lighten mask method.
2024-09-30 23:24:28 +09:00
Hermet Park
fa9223fe1e hotfix: backward compatibility++ 2024-09-30 18:02:48 +09:00
Sergii Liebodkin
b66ff36502 CompositeMethod::ClipPath will be replaced with the Scene::clip()
wg_engine needs to refactor to remove the enum value usage before proceeding with its removal
2024-09-30 18:02:43 +09:00
Hermet Park
ec65501079 gl_engine: --deprecation references. 2024-09-30 16:44:22 +09:00
Hermet Park
8289385760 renderer/scene: rectify the render region elaboration
Properly clip the render region to the current viewport.
2024-09-30 16:44:22 +09:00
Hermet Park
2972a631bd sw_engine: applied OpenMP to improve post-processing performance.
- OpenMp threads will be allocated alongside the TaskSculeduler::threads()
- Performance improved by 2x in a specific animation.
- Disable the thread feature in the Android build test due to system issues with OpenMP compilation.
2024-09-30 16:44:22 +09:00
Hermet Park
ad7c65d2ea renderer: introduced SceneEffect feature
Scene effects are typically applied to modify
the final appearance of a rendered scene,
such as adding a blur effect.

Each effect would have a different number of parameters
to control its visual properties. The Scene::push() interface
 uses variadic arguments to accommodate various cases.

Users should refer to the SceneEffect API documentation
and pass the parameters exactly as required for the specific
effect type. For instance, GaussianBlur expects 3 parameters
which are:

- sigma(float)[greater than 0]
- direction(int)[both: 0 / horizontal: 1 / vertical: 2]
- border(int)[extend: 0 / wrap: 1]
- quality(int)[0 ~ 100]

and, scene->push(SceneEffect::GaussianBlur, 5.0f, 0, 0, 100);

New Experimental APIs:
- SceneEffect::ClearAll
- SceneEffect::GaussianBlur
- Result Scene::push(SceneEffect effect, ...);

Example:
- examples/SceneEffect

issue: https://github.com/thorvg/thorvg/issues/374
2024-09-30 16:44:22 +09:00
Hermet Park
4378d8dc7c renderer: ++TODO for optimization 2024-09-30 16:44:22 +09:00
Mira Grudzinska
310183972e renderer: fix clipped clippers
Fast track was applied for clippers even if they
were also clipped. As a result their clips were
omitted.

@Issue: https://github.com/thorvg/thorvg/issues/2777
2024-09-30 16:44:22 +09:00
Mira Grudzinska
59ffd90758 sw_engine: add support for 8bits gradient rectangles
Rastering for 32bits dst buffer was implemented,
but 8bits dst were not supported.

@Issue: https://github.com/thorvg/thorvg/issues/2765
2024-09-30 16:44:22 +09:00