Commit graph

39 commits

Author SHA1 Message Date
Mira Grudzinska
29ca149b4b sw_engine rle: fixing clipping with non overlaping figures
For clip that did not overlap with the plotted source, the whole
source was plotted - the size of the rle data was not updated.
2021-02-19 15:11:20 +09:00
Hermet Park
849ed12050 sw_engine log: adding missed line wrap. 2020-12-21 18:38:12 +09:00
Hermet Park
4c66018c97 sw_engine log: + log clipPath case.
These functions are one of special compositions.
2020-12-21 18:35:11 +09:00
Patryk Kaczmarek
4dbdcbd057
common composition: support Masking method
New feature - CompositeMethod::MaskAlpha

Newly Support AlphaMask. but it's unstable.

@Issues: 31
2020-12-18 17:40:54 +09:00
Hermet Park
462bf277f2 sw_engine rle: fix an invalid memory access.
There is a mistake that over-access boundary.

This fix it.

@Issues: 178
2020-12-10 14:16:41 +09:00
Hermet Park
1ed611386d
common sw_engine: code refactoring & stabilizing.
Apply tvg Array instead of std::vector

Also Fixed to compList in update() to passed by reference, not copying.
Also Fixed Composition Target memory leak

Here is the binary size result:

[libthorvg.so] 1785376 >> 1607416
[text] 121255 >> 118277
[data] 7792 >> 7736
[dec] 129119 >> 126085
2020-12-09 19:56:59 +09:00
Hermet Park
006e6e0920 sw_engine rle: performance optimization.
Tis is a subsequential trial of 1b8188ee67
for opimizing memory alloc count.

In this time, it concentrates on rle span.

@Issues: 75
2020-11-05 17:32:42 +09:00
Hermet Park
65cbbcf724 sw_engine shape: support fillRule method
this change supports EvenOdd fillrule in shape rendering

@Examples: examples/FillRule.cpp

@Isuses: 97
2020-10-22 17:29:39 +09:00
JunsuChoi
c70d1b1e45
SwRender & tvgPaint: Implement ClipPath feature (#68)
common sw_engine: Implement ClipPath feature

Paint object can composite by using composite API.
ClipPath composite is clipping by path unit of paint.
The following cases are supported.

Shape->composite(Shape);
Scene->composite(Shape);
Picture->composite(Shape);

Add enum
  enum CompMethod { None = 0, ClipPath };

Add APIs
  Result composite(std::unique_ptr<Paint> comp, CompMethod method) const noexcept;

* Example: Added testClipPath
2020-10-07 11:21:23 +09:00
Hermet Park
6365d02a96 optimization: cut off file dependencies.
we should avoid code insertion during file dependencies,
such as #include "xxx.h" which has implementations.

This could increase binary size, we can avoid it as possible.

Current patch improves binary size like this:

From: file(2059008) = text(120360) data(8096) bss(80) dec(128536)
To  : file(1921832) = text(118429) data(7872) bss(56) dec(126357)

More additional patches will come in to optmize binary size.
2020-09-23 20:57:30 +09:00
Hermet Park
c407d4d13d sw_engine: code refactoring.
removed unused macro.
2020-09-15 12:26:57 +09:00
Hermet Park
04c6295974 code refactoring
remove unnecessary condition.
implementation won't be included multiple times not like headers.

Thus this condition is unnecessary.

Change-Id: Id37e675c40ce7213a06c950da8e5ca17ff7245c9
2020-08-20 16:16:46 +09:00
Hermet Park
ffa4a7248b code refactoring
Now, stabilizing is pretty enough.

Remove assert code so that we never abort process in any cases.
This also reduce the binary size.

Change-Id: Ia7d2d5c5a0757b12481eaebad7a86aade6a89c1e
2020-08-19 14:53:38 +09:00
Hermet Park
70b4703707 remove print/cout logs.
we need a comprehensive logging interface for this.

right now, leave as "LOG:" to replace later.

Change-Id: I25321223cd48ec13a1de5e4140cfea75a2f42866
2020-08-18 20:35:13 +09:00
Hermet Park
8abef404cf sw_engine: remove unnecessary assert() call
Change-Id: I8cb249b6b7f32992f7ce9c86e408546c14856330
2020-08-13 19:29:23 +09:00
Hermet Park
9893af979f replace license from Apache 2.0 to MIT
Change-Id: I61f7cb2b0e407bc035f3b2ec7da9b7f230057e24
2020-08-13 16:53:38 +09:00
Hermet Park
2555e82f0d fix compile warnings
comparison of unsigned expression < 0 is always false [-Werror=type-limits]

Change-Id: I8cee625056bcde1f2a3cb2b9ce704b33be5bd725
2020-08-06 17:06:36 +09:00
Hermet Park
8a924cbd78 sw_engine: fix out of cell memory.
we can adjust cell size if the cell memory is out.
the main rle logic missed the exception handling.

Change-Id: I4419eefefccafd788729111eafeb65aa4e6a20e9
2020-07-29 13:40:11 +09:00
Hermet Park
2929fa5c57 sw_engine: optimize rle rendering.
we don't need to apply anti-aliasing if stroke is there.
here turns off anti-alias if stroke width is more than 2.
magic number 2 is experimentally confirmed.

Change-Id: I09031dc2a0a84f31c5904651ed1e62004645ba9a
2020-07-03 18:32:50 +09:00
Hermet Park
9ffc1d40f6 sw_engine: optimize memory allocation.
there are a logical wrong that memory increase size,
it correct that also tune the number to reduce memory allocation time.

Now scene transform test works smoothly.

Change-Id: If0674e33426d794546801a96ad9de711b5de0dcd
2020-06-23 18:59:12 +09:00
Hermet Park
55e215e6ea sw_engine: optimize span generation.
there are unnecessary partial spans generated in orthogonal rectangle.

we can merge those partial spans to others if they are on the same scanline...

Change-Id: I35a437a4f2eec106bd50f46f0390c652e617311d
2020-06-23 17:29:28 +09:00
Hermet Park
4e3f8284e8 sw_engine: grow cell memory buffer up to allow larger shapes
Change-Id: I7a8feaa11d3dad81dd1004782e07a8ac4a768d91
2020-06-09 11:03:18 +09:00
Hermet Park
f335779ce5 sw_engine stroke: stabilizing line drawing.
Also added StrokeLine test

Change-Id: I91143039823d744bf9287534227927556a2f51e1
2020-06-03 19:10:14 +09:00
Hermet Park
3bb272877a sw_engine: fix a missing of variable initializing.
Change-Id: I6451b07709fbc56441363e8f0ee0f4647404ae10
2020-06-03 11:27:34 +09:00
Hermet Park
1686af7643 sw_engine: implement stroke rle part
Current stroke fails to merged shapes case...

you can test with testStroke example

Change-Id: I488af728949cba1d01b88723eb1dc4c49bac6c9b
2020-06-02 18:46:43 +09:00
Hermet Park
41dbd9774a sw_engine: implement stroke cubicto, arcto, lineto
Change-Id: I59e95b1031ebfaf54e966cab334e045613ca3830
2020-06-01 19:20:29 +09:00
Hermet Park
c51241f26b sw_engine: implment basic stroke functions.
Change-Id: Ib9203b4d133ce7ffd80b40d7ad0cac3519b5273d
2020-05-28 20:32:55 +09:00
Hermet Park
60d104a40a sw_engine: code refactoring.
renamed internal variables for better readibility.

Change-Id: I1ba7938401e8b7249c8bcc396be1ba3c109716cd
2020-05-02 17:44:49 +09:00
Hermet Park
11e070d167 sw_engine: support anti-aliasing
Change-Id: I9b79c8b4022ddf2ae4fe980f480ba3ec140750d3
2020-05-01 17:48:21 +09:00
Hermet Park
700a44c623 common shape: added path commands interfaces for user convenient.
+lineTo()
+moveTo()
+cubicTo()
+close()

These interfaces might not perfect optmizied,
but you can build path commands easier than manual data set.

Change-Id: Icb934ca256d3107ca0c938d28015d767fb93355e
2020-04-30 23:36:28 +09:00
Hermet Park
e0ecd680a0 sw_engine: fix crash at merge shape test
increased spare cell memory for rasterizing.

Change-Id: I391dfbfae0ef028d213c55fe1ceca023e272e676
2020-04-30 15:43:13 +09:00
Hermet Park
46ba3352a8 sw_engine: case cover out of surface boundary.
Also added surface boundary test code.

Change-Id: Ib4c327d12ce52d506f1b8a566ffa48e5b5b8c03e
2020-04-30 15:19:46 +09:00
Hermet Park
a15e2c9ca0 sw_engine: fix wrong comparison that brings broken shapes.
These implementation is still at hot coding,
we still need to improve a lot.

Change-Id: I61398bff75395ff5e692ca48f4d62243f74bed85
2020-04-26 14:57:14 +09:00
Hermet Park
fe9c2c9162 common shape: implement appendCircle body.
Change-Id: Ib8507366f84532db3119f04c8d55e0d4e8206f9f
2020-04-26 11:38:06 +09:00
Hermet Park
2628a5a935 sw_engine: tag one optimization point for future work.
Change-Id: Ib41b18c097d24636efbba633972e1c8b7f9a63ef
2020-04-19 11:55:19 +09:00
Hermet Park
75f2bc5f38 sw_engine: optimization++
Adjust rle span generation size to reduce memory allocation.
This span growing is experimentally increased, undeterministic.
Thus We need too increase them every requests, if we increase their
size x 4, we can avoid a lot of memory copy in advance.

Change-Id: Idd24024204a69fa3b6857728b95aa63a3ac26c5e
2020-04-19 11:13:28 +09:00
Hermet Park
c8d800f6c6 sw_engine: implement line and curve raster
Change-Id: I22a77892544cd510cfe646aee60093cebb848806
2020-04-18 19:56:10 +09:00
Hermet Park
2a39617527 implement rle path parts.
Change-Id: I7200d80320404d6e7fb722042b8f330961bee76d
2020-04-15 21:55:53 +09:00
Hermet Park
70c9860d8f implement rle raster.
Change-Id: Ie21dfbf0ff1aed43bfa750eeef3b8c033a986416
2020-04-13 13:42:24 +09:00