vger-rs
nanovgXC
vger-rs | nanovgXC | |
---|---|---|
1 | 3 | |
228 | 113 | |
2.2% | - | |
7.8 | 0.0 | |
4 months ago | 7 days ago | |
Rust | C | |
MIT License | GNU General Public License v3.0 or later |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
vger-rs
-
Vector Graphics on GPU
I've done a library for vector graphics on the GPU which works pretty well for my uses:
https://github.com/audulus/vger
and a rust version:
https://github.com/audulus/vger-rs
(which powers my rust GUI library: https://github.com/audulus/rui)
Here's the approach for rendering path fills. From the readme:
> The bezier path fill case is somewhat original. To avoid having to solve quadratic equations (which has numerical issues), the fragment function uses a sort-of reverse Loop-Blinn. To determine if a point is inside or outside, vger tests against the lines formed between the endpoints of each bezier curve, flipping inside/outside for each intersection with a +x ray from the point. Then vger tests the point against the area between the bezier segment and the line, flipping inside/outside again if inside. This avoids the pre-computation of Loop-Blinn, and the AA issues of Kokojima.
It works pretty well, and doesn't require as much preprocessing as the code in the article. Also doesn't require any GPU compute (though I do use GPU compute for some things). I think ultimately the approach in the article (essentially Piet-metal, aka tessellating and binning into tiles) will deliver better performance, and support more primitives, but at greater implementation complexity. I've tried the Piet-metal approach myself and it's tricky! I like the simpler Shadertoy/SDF inspired approach :)
nanovgXC
-
canvas_ity - A tiny, single-header <canvas>-like 2D rasterizer
Nice work. Any plan to add GPU (opengl) support? CPU rendering is OK but the performance using the GPU is likely order of magnitudes better. Here is a library that uses the same antialiasing technique https://github.com/styluslabs/nanovgXC using OpenGL (based on NanoVG).
-
Vector Graphics on GPU
GPU vector graphics library I released a few years ago: https://github.com/styluslabs/nanovgXC - basically a new backend for nanovg that supports arbitrary paths. Coverage calculation (for analytic antialiasing) is explained a bit here: https://github.com/styluslabs/nanovgXC/blob/master/src/nanov...
-
Advice for the next dozen Rust GUIs
Getting sufficient antialiasing quality for 2D graphics is difficult on GPUs. https://github.com/memononen/nanovg accomplishes this with GL2/GLES2 level hardware for most of the stuff one would want to render as part of a GUI. My project https://github.com/styluslabs/nanovgXC supports rendering arbitrary paths with exact coverage antialiasing, but requires GLES3.1 or GL4 level hardware for reasonable performance.
What are some alternatives?
vger - 2D GPU renderer for dynamic UIs
canvas_ity - A tiny, single-header <canvas>-like 2D rasterizer for C++
rui - Declarative Rust UI library
rust-yew-axum-tauri-desktop - Rust + Yew + Axum + Tauri + Tailwindcss, full-stack Rust development for Desktop apps.
contrast_renderer - Contrast is a WebGPU based 2D render engine written in Rust
glyphy - GLyphy is a signed-distance-field (SDF) text renderer using OpenGL ES2 shading language.
msdfgen - Multi-channel signed distance field generator
nanovg - Antialiased 2D vector drawing library on top of OpenGL for UI and visualizations.
yews
Skia - Skia is a complete 2D graphic library for drawing Text, Geometries, and Images.