13 releases
0.5.1 | Apr 21, 2023 |
---|---|
0.5.0 | Oct 4, 2022 |
0.4.7 | Oct 4, 2022 |
0.4.6 | Jul 10, 2022 |
#290 in Games
100 downloads per month
Used in 4 crates
(via srs2dge-text)
155KB
558 lines
Signed Distance Field (SDF) textures can be used to render text or other vector art more flexibly[1], with higher quality while using less video memory (for the texture).
This no_std
library renders SDF:s directly and not by downscaling a higher resolution rasters.
[1] For example:
- It is possible to use single a 64px glyph to render both 14px and 200px glyphs.
- It is easy to add glow, outlines and such.
Comparisons:
NOTE: Use fontdue for simple glyphs instead. It is a lot faster.
Task | SDF | regular |
---|---|---|
High resolution glyphs | ✓ | ✓ |
Medium resolution glyphs | ✓ | ✓ |
Low resolution glyphs | ✓ | |
Stretched or squished glyphs | ✓ | |
Shadows borders and effects | ✓ | |
GUI:s | ✓ | |
3D game worlds | ✓ |
- ✅ means it is good at
Example usage with image
:
let font = fontsdf::Font::from_bytes(..).unwrap();
let (metrics, sdf) = font.rasterize('x', 64.0, true);
image::GrayImage::from_raw(metrics.width as _, metrics.height as _, sdf)
.unwrap()
.save("sdf_x.png")
.unwrap();
Example output:
Normal
SDF
Example results:
Normal
- 128x156
- 80px font size
SDF
- 128x128
- 48px (+radius) font size (32px input size should be enough for any output size)
- 'free' shadow
TODO:
Dependencies
~6.5MB
~169K SLoC