Mira Grudzinska
a13561e9c5
sw_engine: adding a check before stroke fill dereference
...
The crash was observed for empty shapes.
2021-04-15 13:33:58 +09:00
Hermet Park
d2c04f6037
wasm: fix compile errors.
2021-04-09 22:18:57 +09:00
Mira Grudzinska
30ee03002b
sw_engine: fixing stroke gradient
...
Instead of checking the stroke's fill, the shape's fill was checked.
As a result the improper rastering function was called (or none).
2021-04-09 13:18:52 +02:00
Hermet Park
818d24fc70
sw_engine: fix GradientStroke crash
...
++ strict null check.
2021-04-08 14:15:23 +09:00
Mira Grudzinska
fcad63ec1f
sw_engine raster: adding antialiasing to the gradient rastering functions
...
The gradient rastering functions with composition did not take
antialiasing into account. The missing part has been added.
2021-04-08 13:54:38 +09:00
Mira Grudzinska
9d7a264610
sw_engine raster: refactoring the gradient rastering functions
...
The gradient rastering functions have been splitted into translucent
and opaque.
2021-04-08 13:54:38 +09:00
Mira Grudzinska
6b5db72f67
sw_engine: rastering the opaque radial gradient with masking
...
In the radial gradient rastering functions, the part supporting
the (inverse) masking was added.
2021-04-08 13:54:38 +09:00
Mira Grudzinska
8284b3fdfc
sw_engine: removed unnecessary function parameter
...
In the fillFetchLinear function the offset parameter was removed.
The destination address may be shifted directly in the dst parameter,
it doesn't need to be passed separately.
2021-04-08 13:54:38 +09:00
Hermet Park
9a40b64261
sw_engine raster: ++ precise alpha multiplying
...
previously alpha multiplying operation doesn't have perfect precision,
could loss 1 pixel since it divides 255 values by 256.
This improved operation comply with both precision & performance.
2021-04-05 12:04:25 +02:00
Mira Grudzinska
44f10698ed
sw_engine: unnecessary memory allocation and variables has been removed
2021-04-01 21:19:14 +09:00
Mira Grudzinska
fe32ca8de7
sw_engine: fixing linear gradient rastering for shapes with composition
...
Masking and Inverse masking are for now rastered properly only for the linear
gradients without the opacity.
2021-04-01 11:51:08 +09:00
Patryk Kaczmarek
cd6fb4f483
gradients: paint linerar gradients properly with mask composition method
...
@Issues: 243
Change-Id: Ie26a0b903af94a46683348e3fb7d8b554576997c
2021-03-31 20:38:16 +09:00
Hermet Park
4a19e5b9f6
common: fix wrong viewport region.
...
in the clip rect, viewport must be accumulated to the smaller one.
this patch improves that corner-case.
2021-03-26 17:24:43 +09:00
Hermet Park
f1fe36d8f6
common sw_engine: optimize single rectangle ClipPath.
...
If ClipPath is a singular rectangle,
we don't need to apply this to all children nodes to adjust rle span regions.
Rather than its regular sequence,
we can adjust render region as merging viewport that is introduced internally,
All in all,
If a Paint has a single ClipPath that is Rectangle,
it sets viewport with Rectangle area that viewport is applied to
raster engine to cut off the rendering boundary.
In the normal case it brings trivial effects.
but when use SVGs which has a viewbox, it could increase the performance
up to 10% (profiled with 200 svgs rendering at the same time)
Note that, this won't be applied if the Paint has affine or rotation transform.
@Issues: 294
2021-03-26 17:10:35 +09:00
Hermet Park
4a8f45577a
sw_engine: code refactoring
...
1. unified clip & bounding box in rle processing
2. unified outline boundingbox functions between shape & image.
2021-03-24 18:48:39 +09:00
Hermet Park
1a7d41ce71
updated copyright
2021-03-23 14:31:58 +09:00
Hermet Park
e5381da223
common engines: code refactoring
...
Introduce RenderRegion structure for region data
to simplify the methods paratemers.
also depends on the NRVO for the return data.
2021-03-23 14:18:17 +09:00
Hermet Park
e8cf21a3c9
initializer: add reference counting for the engines initialization.
...
Introduced the reference counting for the backend engines so that
tvg prevents unpaired engine initialization/termination calls by user mistake.
@Issues: 296
2021-03-19 19:45:39 +09:00
Hermet Park
105a59b5b3
sw_engine: optimize rle clipping
...
We don't need to copy the rle data unecessarily,
we can just replace the completed clip rle.
2021-03-16 10:23:11 +09:00
JunsuChoi
ac1434bb74
sw_engine rleClipPath: Modify clippath spans creation size.
...
When updating rle for clipped area, realloc size should be larger than spans size.
so this patch prevents the problem while realloc.
2021-03-15 17:12:21 +09:00
Hermet Park
0984241954
sw_engine fill: correct value loss by data conversion.
2021-03-11 20:10:11 +09:00
Hermet Park
5e01fd8b4b
Revert "sw_engine shape/image: substituting logical 'and' with 'or'"
...
This reverts commit 74b27c74af
.
This patch breaks Stroke example. 1 line drawings...
There is a possibility that less 1 (i.e: 0.5) width axis-aligned line drawings...
So logically "&&" is correct.
2021-03-09 20:13:44 +09:00
Mira Grudzinska
b5bc73849c
sw_engine raster: functions optimization in the image block
...
The alpha value calculation pulled out outside the inner loop
to reduce the number of unnecessary operations.
Added local variables to reduce the number of costly
multiplications performed in a loop.
2021-03-09 19:47:50 +09:00
Mira Grudzinska
74b27c74af
sw_engine shape/image: substituting logical 'and' with 'or'
...
In the case when the height or width of the bounding box is 0
it is not necessary to calculate Rle.
2021-03-09 19:44:29 +09:00
Mira Grudzinska
07e6c476a8
sw_engine fill: fixing the infinite loop condition
...
Fixed in the fillFetchLinear() function.
2021-03-03 17:46:33 +09:00
Hermet Park
d522c9d45e
sw_engine fill: fix wrong gradient transformation
...
There transformation logic was not identical between shape & gradient
gradient transform was applied into center of gradient world,
while shape wasn't. So... we correct gradient transform metric to shape like.
@Issues: 255
2021-03-03 10:53:32 +09:00
Hermet Park
c0362cb69c
sw_engine: fix a composition crash issue.
...
Added an exceptional handling for out of buffer boundary.
2021-02-24 20:02:10 +09:00
Hermet Park
197879f2ef
fixed all wasm build breaks.
2021-02-23 10:47:46 +09:00
Michal Szczecinski
f0ab7f4002
sw common: Fixed crash in rasterRGBA32
...
Description:
Crash was observed in examples when composite object was used.
It was caused because __m256i object was used on non aligned
memory to 32bit. Algorithm in this function was changed to use
unaligned __m256i_u object. Code was also simplified.
2021-02-22 13:26:41 +09:00
Mira Grudzinska
5e1d3772ca
sw_engine raster: fixing rasterization of an image with InvMask
...
In case of the image rasterization with an inverse mask the opacity
was omitted and the alpha value instead of the inverse alpha value was used.
2021-02-22 13:02:04 +09:00
Hermet Park
028e1fa251
sw_engine: enhance log message.
...
more informational log is better.
2021-02-22 12:53:56 +09:00
Mira Grudzinska
229a013fcd
sw_engine math: fixing matrix transformation
...
Unnecessary rounding during matrix transformation has been removed.
The problem occured when scaling a shape with a dashed stroke.
2021-02-22 11:15:11 +09:00
JunsuChoi
70e1e7f1c6
sw_engine Renderer: Fix build problem caused by merge conflict.
2021-02-19 17:33:15 +09:00
Mira Grudzinska
d86032df36
sw_engine: adding a gradient as a stroke feature
...
* sw_engine: adding a gradient as a stroke feature
Similarly as a shape may have a gradient fill so can the stroke.
* Capi: adding APIs for a gradient stroke
Co-authored-by: Hermet Park <hermetpark@gmail.com>
2021-02-19 17:16:10 +09:00
JunsuChoi
415fca577e
common: TVG_UNUSED marking on unused parameter
2021-02-19 16:51:50 +09:00
JunsuChoi
08c37978a9
common: Pointer that can declare const are refactored to use const
...
Pointer and reference parameters should be "const" if the corresponding object is not modified
2021-02-19 16:51:50 +09:00
JunsuChoi
3c7adb0a95
common: Functions that can declare const are refactored to use const
...
Member functions that don't mutate their objects should be declared "const"
2021-02-19 16:51:50 +09:00
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
Mira Grudzinska
6925f6c272
sw_engine raster: checking zero division while inverting the transform matrix
...
In case the user has provided the transformation matrix, it is possible that
the inverse matrix does not exist.
2021-02-09 09:26:37 +09:00
Mira Grudzinska
46f8945028
sw_engine raster: adding rastering functions for image without transformation
...
Added rastering functions for the image (transparent and not) for the fast
track option - identity transform.
2021-02-09 09:21:53 +09:00
Mira Grudzinska
307f3698a8
sw_engine raster: removing unnecessary logical 'and' operation
...
Shifting the 32-bit number by 24 bits leaves only 8 bits,
so there is no need to mask them with 0xFF.
2021-02-03 11:25:19 +09:00
Michal Szczecinski
ba2bd2383d
shape: Fixed reset api.
...
Added stroke's RLE reset in shape reset function.
2021-02-03 11:23:21 +09:00
Mira Grudzinska
3dfc3c4943
sw_engine renderer: rendering optimization of shapes without strokes
...
The value of 'a' for shapes without a stroke could hold the fill 'a' value.
Added checking if stroke exists before calling rastering functions.
2021-02-02 11:53:58 +09:00
Patryk Kaczmarek
905fd46ccf
sw_engine composition: invert alpha masking
...
composition invert alpha masking
@Examples: added InvMasking
@Issues: 31
Change-Id: I2ee9d428d5749240ddf2e6adbb7677dccbe1926f
2021-02-02 11:47:30 +09:00
Hermet Park
3a156b6307
sw_engine composition: enhance image masking
...
composition alpha masking supports scene/paints targets.
@Examples: Masking
@Issues: 31
2021-01-10 23:22:01 +09:00
Hermet Park
581e33b954
sw_engine: optimize raster image.
...
added a routine that draw non-transformed translucent image.
composition images will use this routine to draw faster.
Also added optimization point comments in raster image.
2021-01-10 20:11:37 +09:00
Hermet Park
0e9115cd00
sw_engine renderer: fix invalid rle issue.
...
if shape rendering is failed, all the prepared data must be reset
because those are invalid.
@Issues: 180
2021-01-10 17:39:57 +09:00
Hermet Park
736d6ee4ef
common sw_engine: revise the masking implementation.
...
We re-implement the masking feature with image composition method.
This patch is working only for single shape but settle up coming extensions.
2021-01-04 00:46:59 +09:00
Hermet Park
cfa2d187bf
sw_engine: apply opacity to graident fill case.
...
previously, opacity value is ignored to gradient fill.
This patch implements that case.
2020-12-30 12:38:32 +09:00
Hermet Park
c3d0a79d3e
sw_engine renderer: fix a regression bug.
...
recover a broken shape+stroking opacity that introduced in ealier refactoring...
2020-12-29 12:07:05 +09:00