Hermet Park
eb8539e0b4
sw_engine fill: optimize linear/radial fill fetching.
...
Save the separated for-loop by
unifying the blending/composition in one fetching stage.
2023-05-29 09:45:21 +09:00
Hermet Park
4d842d03f6
sw_engine: code refactoring.
...
unify raster methods that are overly duplicated with each other.
2023-05-29 09:45:21 +09:00
Hermet Park
28257ec807
common masking: optimize InvAlphaMask
...
try fast track if InvAlphaMask has 0 opacity + rectangle shape.
2023-05-29 09:45:21 +09:00
Hermet Park
62963268cb
sw_engine: code cleanup
...
Remove unused template multiply.
Currently, 8-bit multiplication is the only valid operation.
2023-05-29 09:45:21 +09:00
Hermet Park
ee9b947c0c
sw_engine: optimize alpha blending operation.
...
Compact blending instructions by distinquish the
shape & images. since we gurantee the shape color is
premultiplied alpha.
As a result, this enhanced performance by 0.002s in examples/Performance
on my local machine.
This also contains code cleanup chores.
2023-05-29 09:45:21 +09:00
Vincenzo Pupillo
368ff01618
Fix invalid conversion error in Avx raster.
2023-05-22 10:34:25 +09:00
Hermet Park
4838c25fa4
sw_engine raster: compact blender alpha table size.
2023-05-20 20:11:58 +09:00
Hermet Park
5643ecabd8
sw_engine: code refactoring
...
Introduced a blender alpha() to maintain clean and organized code.
2023-05-20 20:11:58 +09:00
Hermet Park
0aae65a171
sw_engine code refactoring.
...
Introduced a compositor table to maintain clean and organized code.
2023-05-20 20:11:58 +09:00
Hermet Park
21c7debf14
composite: Support Inverse Luma Masking
...
The CompositeMethod now includes the newly supported InvLumaMask option:
The source pixels are converted to grayscale (luma values),
and the complement of the target's pixels is alpha blended.
As a result, only the part of the source where the grayscale
is not covered by the target is visible.
@APIs: CompositeMethod::InvLumaMask
@Example: examples/InvLumaMasking.cpp
@Issue: https://github.com/thorvg/thorvg/issues/404
2023-05-20 20:11:58 +09:00
Hermet Park
5ceeb32ef0
api: remove a beta api.
...
- Result Picture::viewbox(float* x, float* y, float* w, float* h) const; //c++
- vg_Result tvg_picture_get_viewbox(const Tvg_Paint* paint, float* x, float* y, float* w, float* h); //c
@Issue: https://github.com/thorvg/thorvg/issues/1372
2023-05-20 13:22:52 +09:00
Hermet Park
0e960e2d2b
sw_engine: remove an unused function.
2023-05-19 10:56:59 +09:00
Hermet Park
f2fdc380b4
fix compiler warnings on MacOS
...
warning: unqualified call to 'std::move' [-Wunqualified-std-cast-call]
2023-05-19 10:56:59 +09:00
Hermet Park
89db13037d
common sw_engine: gather scattered stroking composition.
...
There are two branches for completing stroke composition between the canvas and sw_engine.
It is necessary to centralize the task on the canvas engine side so that
we can maintain the logic without confusion.
2023-05-19 10:35:24 +09:00
Hermet Park
6994925b9d
common shape: fixing stroking composition issue.
...
When combining Shape, Stroke, and AlphaMasking, there is a missing
composition step which results in an incorrect output as expected by the user.
This problem is resolved by introducing shape fill and stroking composition.
@Issue: https://github.com/thorvg/thorvg/issues/209
2023-05-19 10:35:24 +09:00
Hermet Park
d8687314a6
common picture: fix a composition bug.
...
Previously, a picture with a half-translucent mask would not function correctly.
This fix addresses the bug by applying the expected composition step.
Note: Even after applying this patch, a half-translucent mask with shape fill alpha will still not work properly.
We should consider removing the fill alpha property, as it duplicates the Paint opacity.
@Issue: https://github.com/thorvg/thorvg/issues/1423
2023-05-17 11:11:55 +09:00
Hermet Park
c7d77b3517
common scene: fix a potential composition bug.
...
In the current implementation, only a scene with a single shape type
is able to skip the composition step. However, a child picture might
have multiple children shapes as well, which leads to the bug.
2023-05-17 11:11:55 +09:00
Hermet Park
aa000f7c56
api: remove deprecated apis
...
- Result Paint::bounds(float* x, float* y, float* w, float* h) const noexcept;
- Result Picture::load(const char* data, uint32_t size, bool copy = false) noexcept;
@Issue: https://github.com/thorvg/thorvg/issues/1372
2023-05-13 18:30:11 +09:00
Hermet Park
f95c91ddc2
engine gl: fix build error
2023-05-12 12:06:00 +09:00
Hermet Park
0dec5a44b6
engine gl: specify gl as beta
...
The engine hasn't been maintained propelry and it's not functional.
2023-05-12 12:06:00 +09:00
Hermet Park
7956a21fc2
sw_engine: fix the dead lock issue.
...
fully recovered from the scene clipping multi-tasksing.
@Issue: https://github.com/thorvg/thorvg/issues/1430
2023-05-09 15:56:30 +09:00
Mira Grudzinska
52260067e4
common: changed a returned value from load function
...
In the event that malloc returns a nullptr while copying
loaded raw data, a Result::NonSupport value is returned.
However, it appears that Result::FailedAllocation would be
more accurate.
2023-05-09 15:54:20 +09:00
Mira Grudzinska
cfead5ff68
sw_renderer: fixing names after refactor
...
the 'buffer' doesn't exist any more in the Surface
struct. Replaced by tjhe 'buf32' - error visible
only while avx and neon rendering supported.
2023-05-08 22:04:01 +09:00
Hermet Park
3376f44de5
sw_engine: ++8bit grayscale rasterizer.
...
These rasterizers are added for 8bit maskings.
2023-05-08 10:55:03 +09:00
Hermet Park
4893746eb2
sw_engine: code refactoring
...
use shorter name.
2023-05-08 10:55:03 +09:00
Hermet Park
da6216f9bf
sw_engine: specify buffer size so that we can clearly access the buffer data.
...
Also, it introduces the 'pixel_t' type to ensure that anonymous pixel data
follows the system's decision.
2023-05-08 10:55:03 +09:00
Hermet Park
f18d2557e3
sw_engine raster: code refactoring.
...
Move partial region in rasterClear()
2023-05-08 10:55:03 +09:00
Hermet Park
527b1af926
common sw_engine: applied colorspace format size.
...
Now backend engines know which channel size is required for
compositions.
@Issue: https://github.com/thorvg/thorvg/issues/976
2023-05-08 10:55:03 +09:00
Hermet Park
e3f363fea7
common render: added a new type for one byte pixel data.
...
This is designed using for masking buffers.
@Issue: https://github.com/thorvg/thorvg/issues/976
2023-05-08 10:55:03 +09:00
Hermet Park
01b26c43a6
engine: add Renderer::colorSpace() interface
...
This is necessary for acquiring current format size.
@Issue: https://github.com/thorvg/thorvg/issues/976
2023-05-08 10:55:03 +09:00
Hermet Park
1302c18f28
common sw_engine: polished code
...
--OOM handling
++exception handling
++log info
2023-05-08 10:55:03 +09:00
Hermet Park
3c8a4afaa7
sw_engine: fix the broken scene clipping.
...
The implementation has been reverted by https://github.com/thorvg/thorvg/issues/1409
Since the sanitizer is not matured fully and it's false positive as far as I figured,
We revert the scene clipping part.
@Issue: https://github.com/thorvg/thorvg/issues/524
2023-05-06 19:22:21 +09:00
Hermet Park
d7eb913741
sw_engine: fix a logical wrong.
...
the value should be updated properly.
2023-05-06 15:14:11 +09:00
Hermet Park
cc1f86e719
canvas: ++ log msg for dev
2023-05-05 15:52:41 +09:00
Hermet Park
e8eef1af1d
common taskscheduler: revert 4db25db962
...
There is a report of the thread sanitizer.
It could be a false-positive as far as I reviewed,
but we hate to be bothered by it. So let's revert it.
@Issue: https://github.com/thorvg/thorvg/issues/1409
2023-05-04 13:42:50 +09:00
Mira Grudzinska
21ac44d120
common: fixing log std stream
...
By mistake, stdout was switched to stderr
for logs. Fixed.
2023-05-04 09:50:33 +09:00
Hermet Park
bc7b448c01
sw_engine: ++thread-safety
...
One more regression bug by afea40a947
As tasks will now be triggered by other tasks on the worker threads,
the designated memory pool data (outline) for each thread should be
reset before moving on to other tasks.
@Issue: https://github.com/thorvg/thorvg/issues/1409
2023-04-30 20:28:12 +09:00
Hermet Park
e9b12aa9f7
engine/loaders: Migrate alpha premultiplying to the engine side.
...
It's not efficient to handle alpha premultiplying in every loader.
The backend engine should be responsible for it.
Now, we can remove duplicate code.
2023-04-29 12:37:09 +09:00
Hermet Park
9fb66973f0
common picture: tiny optimization.
...
Currently Picture doesn't allow to change the image source.
Thus reloading is not non-sense.
2023-04-28 15:27:53 +09:00
Hermet Park
c710af2560
loaders: Remove the color space conversion on the loader side.
...
Now, the job is completely delegated to the backend engine.
2023-04-28 15:27:53 +09:00
Hermet Park
b733030357
sw_engine: supports the color space conversion.
...
Currently implements only the necessary functions for converting
between ARGB and ABGR.
Now conversion can be accelerated by the backend engines.
2023-04-28 15:27:53 +09:00
Hermet Park
cf4484c1ad
engine/loaders: develop the ColorSpace feature infrastructure
...
Replace the existing fragile usage of the colorspace data type
with a new and robust concrete ColorSpace type.
2023-04-28 15:27:53 +09:00
Hermet Park
84012651cc
common engine: code refactoring
...
Introduce the RenderMesh structure to reduce the number of required parameters.
2023-04-27 10:16:12 +09:00
Hermet Park
6d08586883
common engine: code refactoring
...
Unify renderImage and renderImageMesh and hide their routines in backends.
2023-04-27 10:16:12 +09:00
Hermet Park
8a67bff7c9
common: code refactoring
...
Use own bit operation helper.
2023-04-26 11:15:48 +09:00
Hermet Park
ac8d0018b5
common taskscheduler: fix a potential crash issue.
...
Guarantee the tasks are not deleted until the taskscheduler finished them.
@Issue: https://github.com/thorvg/thorvg/issues/1370
2023-04-26 00:23:03 +09:00
Hermet Park
20466ea78f
sw_engine rle: The out-of-range memory access has been fixed.
...
@Issue: https://github.com/thorvg/thorvg/issues/1370
2023-04-26 00:23:03 +09:00
Hermet Park
7e3380db8b
sw_engine mempool: fixed to address a potential memory corruption issue.
...
The previous memory pool was being shared by both the main and first threads,
which could lead to corruption if any threading changes occurred.
@Issue: https://github.com/thorvg/thorvg/issues/1370
2023-04-26 00:23:03 +09:00
Hermet Park
92dbc8507e
common: polished the log message.
...
Removed 'l.'. It just bothers in reading numbers.
2023-04-25 14:23:23 +09:00
Hermet Park
aa915ee1c4
Make it silent MSVC's trivial compilation warnings.
...
@Issue: https://github.com/thorvg/thorvg/issues/1381
2023-04-21 08:28:56 +09:00