Sergii Liebodkin
5b46637a3d
wg_engine: uniform stage buffers (transform and solid color)
...
https://github.com/thorvg/thorvg/issues/3505
2025-06-06 14:06:54 +03:00
Sergii Liebodkin
858205a132
webgpu: replace readonly strorages to texture2d (v24 migration)
...
https://github.com/thorvg/thorvg/issues/2909
2025-04-17 11:25:04 +09:00
Hermet Park
afd780bfa9
wg_engine: set default file permissions 644 for consistency
2025-03-27 22:19:36 +09:00
Sergii Liebodkin
1f204ffb8d
wg_engine: Introduce triton effect for webgpu renderer
...
Issue: https://github.com/thorvg/thorvg/issues/3054
2025-02-27 20:11:21 +09:00
Sergii Liebodkin
f024c54b87
wg_engine: Introduce tiny effect for webgpu renderer
...
Issue: https://github.com/thorvg/thorvg/issues/3054
2025-02-27 20:11:21 +09:00
Sergii Liebodkin
9a2d1136de
wg_engine: Introduce fill effect for webgpu renderer
...
Issue: https://github.com/thorvg/thorvg/issues/3054
2025-02-27 12:15:42 +09:00
Sergii Liebodkin
64ed756c2c
wg_engine: Introduce drop shadow effect for webgpu renderer
...
Issue: https://github.com/thorvg/thorvg/issues/3054
Supported color, angle, distance, sigma, quality params
2025-02-25 11:54:04 +09:00
Sergii Liebodkin
37992b52c9
webgpu_gaussian_optimization
...
wg_engine: optimize gaussian blur effect for webgpu renderer
Issue: https://github.com/thorvg/thorvg/issues/3054
2025-02-13 12:52:40 +09:00
Sergii Liebodkin
857f1404e1
wg_engine: gaussian blur basic implementation
...
Introduce blur effect for webgpu renderer
Issue: https://github.com/thorvg/thorvg/issues/3054
2025-02-06 14:44:08 +09:00
Mira Grudzinska
e7e168a28b
wg_engine: fix color burn/dodge edge cases
...
Aligned with sw_engine implementation.
2025-02-03 15:06:39 +09:00
Hermet Park
d2d93792df
wg_engine: corrected ColorDodge, ColorBurn equation
...
issue: https://github.com/thorvg/thorvg/issues/3072
2025-01-08 13:54:09 +09:00
Hermet Park
a12accbc93
updated copyright
2025-01-03 14:32:31 +09:00
Sergii Liebodkin
07fbe56162
wg_engine: fixed scene blending equation and clear color rule
...
Issue: https://github.com/thorvg/thorvg/issues/2998
2024-12-04 11:39:57 +09:00
Sergii Liebodkin
163640b3e5
wg_engine: apply texture formats on creation (refactoring)
...
Apply texture color space on texture creation, instead of shader side
2024-11-29 18:57:57 +09:00
Sergii Liebodkin
627f358f49
wg_engine: support gradient focal point
...
Implemented gradien focal points
Issue https://github.com/thorvg/thorvg/issues/2728
Issue https://github.com/thorvg/thorvg/issues/2936
2024-11-08 18:47:38 +09:00
Sergii Liebodkin
975ddb68ca
wg_engine: fixed image and scene normal blend
...
Pre-multiplied color on alpha chanel applied
2024-10-28 23:35:37 +09:00
Sergii Liebodkin
0815366763
wg_engine: clippath optimization
...
Full review of clipping workflow.
Before we are used separate render target for each clip path and compute shader to find clip path intersections with AND logic.
Now we are using depth buffer and transactions from depth to stencil and back to get AND logic intersections,
Compute shaders, layouts and pipelines was removed
2024-10-24 17:49:17 +09:00
Sergii Liebodkin
81cb7da9f3
wg_engine: MSAA support, part 1 - move blending to fragment shaders
...
Apply custom blending using fragment shaders instead of compute shaders.
2024-10-17 18:00:15 +09:00
Sergii Liebodkin
2bd8fdad36
wg_engine: fix custom scene blending with opacity
...
fixed incorrect opacity applience for scene blending
2024-10-04 23:23:03 +09:00
Sergii Liebodkin
7a6a89cf26
wg_engine: wrong gradient transformation fixed
...
issue: https://github.com/thorvg/thorvg/issues/2620
2024-09-13 13:36:21 +09:00
Hermet Park
a746e1fcd6
renderer: blending refactoring++
...
- reordered the blending types to align with lottie spec.
- removed source over.
2024-09-09 21:18:13 +09:00
Sergii Liebodkin
732a2be7e8
wg_engine: scene blending optimization
...
- used hardware blending stage for scene blending
- used AABB for scene blending
- reduced number of offfscreen buffers coping
- reduced number of render pass switching
- used render pipelines abilities to convert offscreen pixel format to screen pixel format
- removed unused shaders
2024-08-28 18:33:07 +09:00
Sergii Liebodkin
0787e46635
wg_engine: aabb based masking optimization
...
* used fragment shaders for mask applience instead of compute shaders
* less render targets swithing
* shape aabb based on transformed shape bbox
2024-08-20 16:23:31 +09:00
Sergii Liebodkin
88b4f75e4f
webgpu: shaders refactoring
...
Deep shader refactoring for the following purposes:
* used pre-calculated gradient texture instead of per-pixel gradient map computation
* used HW wrap samples for fill spread setting
* unified gradient shader types
* used single shader module for composition instead of signle module per composition type
* used single shader module for blending for each of fill type (solid, gradient, image) instaed of signle module per blend type
* much easier add new composition and blend equations
* get rided std::string uasge
* shaders code is more readable
2024-08-13 11:52:45 +03:00
Sergii Liebodkin
132b22cb47
webgpu: light/dark mask mode support
...
[issues 2608: light/dark mask](#2608 )
* CompositeMethod::LightMask
* CompositeMethod::DarkMask
2024-08-10 13:19:30 +09:00
Sergii Liebodkin
a4bbf14371
wg_engine: composition and blend optimization
...
* bind groups creation in real time removed - performance boost
* blend and composition shaders decomposed - performance boost
* shader modules and pipeline layouts generalized - less memory usage
* shared single stencil buffer used - less memory usage
* bind groups usage simplified
* general context API simplified and generalized
* all rendering logic moved into new composition class
* ready for hardware MSAA (in next steps)
* ready for direct mask applience (in next steps)
2024-08-09 14:30:17 +09:00
Sergii Liebodkin
6cd745dd2e
wg_engine: emscripten and browser support
...
[issues 2410: emscripten support](https://github.com/thorvg/thorvg/issues/2410 )
- Research and prototype the Emscripten build with WebGPU.
meson setup script:
meson setup builddir -Ddefault_library=static -Dloaders=all -Dsavers="all" -Dbindings="wasm_beta" -Dengines="wg_beta" --cross-file ./cross/wasm_webgpu.txt
2024-08-01 14:20:08 +09:00
Sergii Liebodkin
4cc132ad47
wg_engine: fix fill spread artifacts
...
[issues 2435: ](FillSpread) example
Fixed range selector edged cases
2024-07-17 12:51:06 +09:00
Sergii Liebodkin
2c948a33d3
wg_engine: ClipPath support
...
[issues 1479: ClipPath](#1479 )
Supports ClipPath composition.
Clip path composition is an only composition type who doesn't ignore blend method.
Clip path is a combination of composition approach and blend approach using compute shader
2024-07-16 00:01:47 +09:00
Sergii Liebodkin
8c4102362f
wg_engine: fix masking methods support
...
See Masking, InvMasking, LumaMasking, InvLumaMasking, MaskingMethods examples
sw/webgpu
2024-07-09 22:02:30 +09:00
Sergii Liebodkin
e7e6839571
wg_engine: fix blend methods support
...
Full review of blending support.
Support Solid color, Gradient fill and Image blending workflows
See Blending, SceneBlending, Opacity examples
2024-07-04 16:19:50 +09:00
Sergii Liebodkin
1afe834021
wg_engine: fix scene opacity usage
...
Changed blend equation to make it the same as for referenced sw renderer.
2024-07-03 13:47:08 +09:00
Josh Soref
e061fa6628
common: fix 178+ spelling errors
2024-07-01 21:58:46 +09:00
Sergii Liebodkin
03c6f43441
wg_engine: fix scene rendering with blend
...
Fix allplience of the blend method, that setuped for scene, but not for a shape
Overlay blend func changed to be close to spec
2024-06-19 01:46:59 +09:00
Sergii Liebodkin
184343f6f2
wg_engine: fix composition math
...
Fix AlphaMask, InvAlphaMask, LumaMask and InvLumaMask math
Fix double apllience of opacity value
2024-06-17 11:44:13 +09:00
Sergii Liebodkin
7e493f91f2
wg_engine: cross-platform support
...
it provide changes public API for webgpu canvas interface to provide nessessary handles to native window for different platforms:
API Change:
- Result target(void *instance, void *surface, uint32_t w, uint32_t h) noexcept;
2024-06-12 12:39:37 +09:00
Sergii Liebodkin
a2ea964be1
wg_engine: fix color buffer corruption with wgpu-opengl wrapper (linux)
...
In a case of usage stencil buffer only we need to turn off an color target writes. In other case color buffer fill be filled by unxepcted color if fragment shader did not return any value.
It happens in a case on OpenGL realization of webgpu, that used in linux
Befire:
After:
2024-06-04 15:22:32 +09:00
Sergii Liebodkin
a532ac3eb2
wg_engine: blending and composition optimization
...
[issues 1479: Masking, InvMasking, LumaMasking, InvLumaMasking](#1479 )
Computes composition and blending using simgle pass istead of two full screen passes
2024-04-29 16:36:00 +09:00
Sergii Liebodkin
712fc3cfea
wg_engine: Lottie extensions
...
[issues 1479: LottieExtensions](#1479 )
LottieExtensions example supports
Supports multiple color stops for gradient fill (redial and linear)
2024-04-02 20:06:06 +09:00
Sergii Liebodkin
4b2f5ca510
wg_engine: fill spread
...
[issues 1479: LinearGradient, RadialGradient](#1479 )
Introduced fill spreads: Pad, Reflect, Repeat
Pad:
Reflect:
Repeat:
2024-03-07 11:45:23 +09:00
Sergii Liebodkin
1794ec0924
wg_engine: antialiasing
...
[issues 1479: antialiasing](#1479 )
Anti-aliasing implementation
Implements antialiasing as a post process on cimpute shaders and original render target with scale of 2x.
Can be modified as an external settings
2024-03-04 19:33:34 +09:00
Sergii Liebodkin
e1f6572bde
wg_engine: clenup shader sources
...
Remove unused composition/blending shader sources
2024-02-05 10:46:01 +09:00
Sergii Liebodkin
6b6947f679
wg_engine: introduced blending
...
[issues 1479: blending](#1479 )
Supported blend settings:
Normal
Add
Screen
Multiply
Overlay
Difference
Exclusion
SrcOver
Darken
Lighten
ColorDodge
ColorBurn
HardLight
SoftLight
2024-01-30 11:49:20 +09:00
Sergii Liebodkin
4f528d45f5
wg_engine: introduced compute pipeline entities
...
introduces posibility to create compute pipelines
does not affect functionality
2024-01-23 18:08:26 +09:00
Sergii Liebodkin
edd8756b73
wg_engine: introduced scene opacity
...
[issues 1479: opacity](#1479 )
Supported opacity value for scene
Usage example:
//Create a Scene
auto scene = tvg::Scene::gen();
scene->opacity(100);
//Prepare Circle
auto shape1 = tvg::Shape::gen();
shape1->appendCircle(400, 400, 250, 250);
shape1->fill(255, 255, 0);
shape1->opacity(100);
scene->push(std::move(shape1));
//Round rectangle
auto shape2 = tvg::Shape::gen();
shape2->appendRect(450, 100, 200, 200, 50, 50);
shape2->fill(0, 255, 0);
shape2->strokeWidth(10);
shape2->strokeFill(255, 255, 255);
scene->push(std::move(shape2));
canvas->push(std::move(scene));
2024-01-18 18:00:08 +09:00
Sergii Liebodkin
45368c319e
wg_engine: introduced composition ability
...
[issues 1479: Masking](#1479 )
Supported composition methods:
AlphaMask
InvAlphaMask
LumaMask
InvLumaMask
AddMask
SubtractMask
IntersectMask
DifferenceMask
Usage example:
//Solid Rectangle
auto shape = tvg::Shape::gen();
shape->appendRect(0, 0, 400, 400);
shape->fill(0, 0, 255);
//Mask
auto mask = tvg::Shape::gen();
mask->appendCircle(200, 200, 125, 125);
mask->fill(255, 255, 255); //AlphaMask RGB channels are unused.
//Nested Mask
auto nMask = tvg::Shape::gen();
nMask->appendCircle(220, 220, 125, 125);
nMask->fill(255, 255, 255); //AlphaMask RGB channels are unused.
mask->composite(std::move(nMask), tvg::CompositeMethod::AlphaMask);
shape->composite(std::move(mask), tvg::CompositeMethod::AlphaMask);
canvas->push(std::move(shape));
//Star
auto star = tvg::Shape::gen();
star->fill(80, 80, 80);
star->moveTo(599, 34);
star->lineTo(653, 143);
star->lineTo(774, 160);
star->lineTo(687, 244);
star->lineTo(707, 365);
star->lineTo(599, 309);
star->lineTo(497, 365);
star->lineTo(512, 245);
star->lineTo(426, 161);
star->lineTo(546, 143);
star->close();
star->strokeWidth(30);
star->strokeJoin(tvg::StrokeJoin::Miter);
star->strokeFill(255, 255, 255);
//Mask3
auto mask3 = tvg::Shape::gen();
mask3->appendCircle(600, 200, 125, 125);
mask3->fill(255, 255, 255); //AlphaMask RGB channels are unused.
mask3->opacity(200);
star->composite(std::move(mask3), tvg::CompositeMethod::AlphaMask);
if (canvas->push(std::move(star)) != tvg::Result::Success) return;
2024-01-15 17:33:59 +09:00
Jinny You
2c6c8d3b21
updated copyright date ( #1866 )
2023-12-28 10:43:25 +09:00
Sergii Liebodkin
323b615f0d
wg_engine: Added shape opacity value usage
...
[issues 1479: Opacity](#1479 )
Usage example:
// prepare a shape (Rectangle + Rectangle + Circle + Circle) with opacity
auto shape1 = tvg::Shape::gen();
shape1->appendRect(0, 0, 200, 200); //x, y, w, h
shape1->appendRect(100, 100, 300, 300, 100, 100); //x, y, w, h, rx, ry
shape1->appendCircle(400, 400, 100, 100); //cx, cy, radiusW, radiusH
shape1->appendCircle(400, 500, 170, 100); //cx, cy, radiusW, radiusH
shape1->fill(255, 255, 0); //r, g, b
shape1->opacity(128) //opacity
canvas->push(std::move(shape1));
2023-12-21 09:43:33 +09:00
Sergii Liebodkin
e2458570f8
wg_engine: pipelines and bind groups refactoring
...
- shader and system types synchronized
- pipelens and bind groups description separated
- pipelines description simplified
2023-12-18 22:45:13 +09:00
Sergii Liebodkin
5374155048
Add support for textures color space formats
...
[Issues 1479: pictures](https://github.com/thorvg/thorvg/issues/1479 )
Formats supported:
ABGR8888
ARGB8888
ABGR8888S
ARGB8888S
2023-11-20 17:25:40 +09:00