Commit graph

845 commits

Author SHA1 Message Date
RuiwenTang
7eeba75472 gl_engine: Use advance tessellate algorithm
Introducing a new tessellate algorithm to break polygon into triangles.
2023-08-28 11:36:43 +09:00
Hermet Park
7d797ee548 Yet we don't break apis, this patch reverts the next:
cb36c25aff
8c0fc2b25a
c1e4e0808a

Those reverted changes sholud be in the bucket, the next issue item:

@Issue: https://github.com/thorvg/thorvg/issues/1372
2023-08-24 01:00:57 +09:00
Hermet Park
f2e755cdd5 sw_engine: fix dash offset bug.
The latest offset feature has a missing starting point of the cubic bezier.
This fix addresses the issue.
2023-08-24 00:57:26 +09:00
Hermet Park
001c1c06fc sw_engine: --compiler warning
../src/lib/sw_engine/tvgSwShape.cpp:232:28: warning: comparison of integer expressions of different signedness: ‘int’ and ‘uint32_t’ {aka ‘unsigned int’} [-Wsign-compare]
  232 |         for (auto i = 0; i < dash.cnt; ++i) patternLength += pattern[i];
      |                          ~~^~~~~~~~~~
../src/lib/sw_engine/tvgSwShape.cpp:239:28: warning: comparison of integer expressions of different signedness: ‘int’ and ‘uint32_t’ {aka ‘unsigned int’} [-Wsign-compare]
  239 |         for (auto i = 0; i < dash.cnt * (1 + isOdd); ++i, ++offIdx) {
2023-08-23 12:47:10 +09:00
Mira Grudzinska
478e45f9f3 common: stroke dash offset support added
The feature is supported also in the svg loader.

@Issue: https://github.com/thorvg/thorvg/issues/1591
2023-08-23 12:40:27 +09:00
Hermet Park
b240e781d9 loader/lottie: ++optimization.
Removed intermediate scenes that were nothing more than transformations.
2023-08-22 21:25:37 +09:00
Hermet Park
77de62068c renderer taskscheduler: code refactoring.
removed an unnecessary internal variable.
2023-08-21 17:16:45 +09:00
Hermet Park
8f9bdebd35 renderer task-scheduler: ++thread safety
Currently, tasks are expected to be triggered from the main thread.
This ensures preventing the popping of a thread from a worker thread.

Previously, there was a potential deadlock problem...
2023-08-21 17:16:45 +09:00
Mira Grudzinska
c2ca01a5c5 common: shape's composition fixed
In the case of a gradient stroke and a valid
fill, the composition wasn't applied correctly,
resulting in an unexpected overlap between
the fill and stroke.

@Issue: https://github.com/thorvg/thorvg/issues/445
2023-08-20 21:39:56 +09:00
Hermet Park
f573e1390f renderer/paint: added an option for stroking when acquiring bounding box size.
The 'Paint' function now includes an internal stroking option,
allowing the bounding box to be calculated with or without the stroke size taken into account.

This feature is particularly useful for SVG loaders,
and we might consider making the interface available for user demands in the future.
2023-08-18 22:15:55 +09:00
Hermet Park
381dfb06d4 renderer paint: tiny optimization
Skip the unnecessary assignment of the value when the initial values
come.
2023-08-17 21:28:58 +09:00
RuiwenTang
66e533deee gl_engine: Fix mistake in glbuffer id check
`GL_INVALID_VALUE` is generate during `glGenBuffers` and is checked by
calling `glGetError()` inside `GL_CHECK` macro.

While the buffer id is valid if the value is not zero.
2023-08-17 21:28:37 +09:00
Mira Grudzinska
b9c71b4e0f common: log msg++ 2023-08-16 00:36:42 +09:00
Hermet Park
765b02b49d renderer/transform: removing unnecessary initialization logic
The matrix initialization logic described here does not occur frequently.
It does not warrant investing extra time in comparing the transform values.
2023-08-15 15:48:59 +09:00
Hermet Park
9e0a3aa678 loader lottie: tiny data copy optimization.
This patch tries to skip the matrix data copy as possible.
2023-08-15 15:48:48 +09:00
RuiwenTang
8212d6f0f9 gl_engine: refactor matrix calculation
1. convert mat4 directly from exist mat3, and remove unused calculation
   code.
2. since normalized position is only meaningful in vertex shader stage.
   use logical position in fragment shader stage for all gradient
   pipeline.
2023-08-14 23:59:26 +09:00
RuiwenTang
acd51a3aa0 gl_engine: use modern glsl syntax in shader source
Upgrade the used glsl version in GL shader source.

  New version can directly specify the attribute location in
  shader and the uniform block is only available in new glsl version
2023-08-11 23:14:21 +09:00
Hermet Park
7057dc594d renderer: enhance stability
introduce a paint reference count
to prevent any duplicated resource removal.
2023-08-11 15:00:09 +09:00
Hermet Park
6a59e1b715 loader: avoid attempting forceful loading when the given MIME type is not correct.
Loading images when the MIME type is incorrect is unnecessary
and often results in failure, adding unnecessary processing overhead.

Pictures should have a clear MIME type assigned by users.
2023-08-11 15:00:09 +09:00
RuiwenTang
9960cc4794 gl_engine: use vertex array buffer and index buffer when render primitive
VAO is new object in modern GL API, which can split and manage vertex
buffer and attribute state. This is optional in GLES and is mandatory in
GL.

Also index buffer is faster then pass cpu data in GL draw call.
2023-08-11 11:39:54 +09:00
RuiwenTang
7a35ff4d4b gl_engine: upgrade min gl version
most device supported morden gl which is:
GLES 3.0 for mobile GPU
GL 3.3 for desktop GPU
2023-08-09 23:23:57 +09:00
Hermet Park
6f8504d3b9 loader/lottie: ++safety
- add an execeptional hanlding at parsing the assets.
- The precomp layer failed to prepare its instance in the parsing stage. This corrects the mistake.
2023-08-09 21:30:25 +09:00
RuiwenTang
9db9e003ba common: add new method to get mat4x4 directly from mat3x3
The 3x3 matrix already contains the geometric transformation
information required for 2D rendering.

We can directly convert from the 3x3 matrix to
the 4x4 matrix to facilitate subsequent GPU rendering.
2023-08-09 11:09:41 +09:00
Hermet Park
be8cfd5f3f common picture: --code inlining.
dec: 273029 -> 272789
2023-08-08 10:47:43 +09:00
Hermet Park
c0cb8c0ce8 apis: remove a beta api.
- const uint32_t* Picture::data(uint32_t* w, uint32_t* h) const

Returning pixel data is not guaranteed as the picture may contain vector resources.
Remove it unless it's absolutely necessary.

@Issue: https://github.com/thorvg/thorvg/issues/1372
2023-08-08 10:47:37 +09:00
Hermet Park
9af89f9f18 common: deleted paints only when they are no longer valid.
Pictures can be shared with Animation instances.
The condition can now be distinguished by checking the `dispose()` return value.
2023-08-07 14:03:42 +09:00
Mira Grudzinska
f0d8ab4274 utils: math functions moved from lib to utils 2023-08-05 11:49:36 +09:00
Hermet Park
0e97d21752 common canvas: Alter the concept of the Canvas::clear() API.
We've changed the behavior of Canvas::clear(false).

The canvas::clear(false) now retains the paints, allowing the user to update the next frame
more easily without having to recompose the paint list.

Previously, clear(false) removed the paint list from the canvas,
requiring the user to re-push all of them in the next frame.

Now, we offer the Canvas::paints() API, allowing users to modify the paint list directly instead.

This change will break compatibility with previous versions of Canvas.

Therefore, this update is included in ThorVG 1.0.

@Issue: https://github.com/thorvg/thorvg/issues/1372
2023-08-02 17:23:53 +09:00
Hermet Park
921bd94b6f sw_engine renderer: fix a memory leak.
disposed of task memory properly, detected by Memory Sanitizer.
2023-07-29 16:16:37 +09:00
Hermet Park
2b77522d5f sw_engine c: fix compile warnings on windows.
[31/75] Compiling C++ object src/thorvg-0.dll.p/lib_sw_engine_tvgSwRaster.cpp.obj
D:\Projects\thorvg\src\lib\sw_engine\tvgSwRasterC.h(29): warning C4311: 'type cast': pointer truncation from 'PIXEL_T *' to 'long'
        with
        [
            PIXEL_T=uint8_t
        ]
../src/lib/sw_engine/tvgSwRaster.cpp(1900): note: see reference to function template instantiation 'void cRasterPixels<uint8_t>(PIXEL_T *,PIXEL_T,uint32_t,int32_t)' being compiled
        with
        [
            PIXEL_T=uint8_t
        ]
D:\Projects\thorvg\src\lib\sw_engine\tvgSwRasterC.h(29): warning C4302: 'type cast': truncation from 'PIXEL_T *' to 'long'
        with
        [
            PIXEL_T=uint8_t
        ]
D:\Projects\thorvg\src\lib\sw_engine\tvgSwRasterC.h(29): warning C4311: 'type cast': pointer truncation from 'PIXEL_T *' to 'long'
        with
        [
            PIXEL_T=uint32_t
        ]
../src/lib/sw_engine/tvgSwRaster.cpp(1911): note: see reference to function template instantiation 'void cRasterPixels<uint32_t>(PIXEL_T *,PIXEL_T,uint32_t,int32_t)' being compiled
        with
        [
            PIXEL_T=uint32_t
        ]
D:\Projects\thorvg\src\lib\sw_engine\tvgSwRasterC.h(29): warning C4302: 'type cast': truncation from 'PIXEL_T *' to 'long'
        with
        [
            PIXEL_T=uint32_t
        ]
2023-07-29 14:24:53 +09:00
Hermet Park
24c0b5ecf5 sw_raster c: fix the misaligned memory access.
An issue occurred in the 64-bit accelerated raster version,
involving 8 bytes of misaligned memory access.

This was detected by the memory sanitizer and has now been fixed.
2023-07-29 10:29:03 +09:00
Hermet Park
65189ab8e8 sw_engine texmap: fixed a memory violation.
A reported out-of-range memory access issue,
as identified by the sanitizer, has been corrected.
2023-07-29 10:29:03 +09:00
Hermet Park
3e8225a5ba common math: promote matrix functions.
comparing matrices is a common mathmatical operation.
2023-07-28 21:57:40 +09:00
Hermet Park
a74062d5f1 loader tvg: add missing strokeFirst property.
tvg binary missed the stroke order,
this patch implements the missing condition.

@Issue: https://github.com/thorvg/thorvg/issues/1499
2023-07-28 21:57:40 +09:00
Hermet Park
1b7c882be4 sw_engine raster: fixed a wrong composition instruction.
it's a regression bug.

@Issue: https://github.com/thorvg/thorvg/issues/1540
2023-07-28 18:35:51 +09:00
Hermet Park
68b8fce501 loader lottie: ++optimization.
Aggressive parallelization is implemented to perform updates
on every frame in an asynchronous manner.
2023-07-28 16:54:44 +09:00
Hermet Park
f4717fb4c3 sw_engine: --redundant comment. 2023-07-27 00:56:22 +09:00
Hermet Park
f93fbc9e59 sw_engine: enforce the drawing of small stroke cubic outlines.
At the construction stage, some stroke points can be skipped
if the distance between the points is too narrow.

Previously, this was assumed to be an error case,
but it's clearly intended to remove unnecessary points introduced in a small area of drawing.

This sometimes leads to a flickering issue when super small-sized vector images are drawn.

Now, it's fixed.
2023-07-27 00:40:37 +09:00
Hermet Park
03f878bb2e loader lottie: adds the lottie property, model and parser. 2023-07-27 00:31:27 +09:00
Hermet Park
e7a94f5314 common Animation: introduce the Animation class.
This class serves as the base for Animation.
The main purpose of its APIs is to control the animation frames.

Its example will be provided in the upcoming commits.

@APIs:
Result Animation::frame(uint32_t no) noexcept;
Picture* Animation::picture() const noexcept;
uint32_t Animation::curFrame() const noexcept;
uint32_t Animation::totalFrame() const noexcept;
float Animation::duration() const noexcept;
static std::unique_ptr<Animation> Animation::gen() noexcept;

@Issue: https://github.com/thorvg/thorvg/pull/1450
2023-07-27 00:31:27 +09:00
Hermet Park
7e7a561d9f common loader: enable lottie loader
json/lottie extensions are recognized as Lottie file format.
2023-07-27 00:31:27 +09:00
Hermet Park
7c58d7afaa common frame_module: adds FrameModule interface.
This interface is designed for controlling animation frames.
2023-07-27 00:31:27 +09:00
Hermet Park
0f40eb90ae common loader: adds animatable() interface
This interface returns a value indicating
whether the current loader supports animation or not.
2023-07-27 00:31:27 +09:00
Hermet Park
a1f0b06f41 common array: revise code.
maintain code with an optimial size.
2023-07-25 19:57:12 +09:00
Hermet Park
055daed3f3 common shape: add an internal method to forcibly update the properties.
This internal access assists in performing direct property updates
among the engine's internal objects.
2023-07-25 19:57:12 +09:00
Hermet Park
192d29fa8a common array: enhance the features.
Add a push() method that appends a whole array instance.
2023-07-25 19:57:12 +09:00
Hermet Park
d53d8d726f common bezier: enhancement to the common Bezier function
Add a method that returns the angle at position 't'.
also revise bezAt() method to allow optimal usages.
2023-07-25 19:57:12 +09:00
Mira Grudzinska
20cf8c6725 sw_engine: fix compiler warning
Warning: comparison of integer expressions of different signedness

@Issue: https://github.com/thorvg/thorvg/issues/1526
2023-07-24 01:44:24 +02:00
Hermet Park
0e86cfebba sw_engine raster: ++strict types. 2023-07-19 21:57:04 +09:00
Hermet Park
d99d8a565f common array: fix a wrong size. 2023-07-18 15:09:21 +09:00