replaced 32-bit operations with 8-bit operations for masking buffers.
We might need a grasycale image support for applying 1-byte channel masking input(Picture).
Some of masking implementation are disabled by this reason.
Also, I don't expecct it's necessary for the thorvg now.
Corrected subtract/intersect masking behaviors that were inaccurately functioning
within chain-masking.
This also helps to enhance the masking performance by reducing the
masking region when applying subtract/intersect.
@Issue: https://github.com/thorvg/thorvg/issues/1606
../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) {
This reverts commit 6cbc1de570.
Setting def value for 'a' makes it impossible to overload
the 'stroke' api with 3 values (needed for introducing dash offset).
Replace the linear search algorithm with binary-search.
The performance enhancement may not yield significant benefits in normal cases.
However, it becomes crucial if the animation comprises an extensive number of frames...
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...
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
Added support for the objectBoundingBox value of
the clipPathUnits and for the userSpaceOnUse value
of the maskContentUnits.
@Issue: https://github.com/thorvg/thorvg/issues/429
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.
`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.
In every frame, the image undergoes a Colorspace conversion attempt.
This approach aims to bypass the step by retaining the pre-converted image data.
I acknowledge that this might not be the best approach,
but it is proving to be quite effective at the moment.