Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/xor-bits/fontsdf
Fonts => Signed Distance Fields
https://github.com/xor-bits/fontsdf
font game-development rust sdf-2d
Last synced: about 1 month ago
JSON representation
Fonts => Signed Distance Fields
- Host: GitHub
- URL: https://github.com/xor-bits/fontsdf
- Owner: xor-bits
- License: mit
- Created: 2022-05-08T19:12:58.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2023-04-21T15:56:20.000Z (almost 2 years ago)
- Last Synced: 2024-03-14T19:34:29.085Z (10 months ago)
- Topics: font, game-development, rust, sdf-2d
- Language: Rust
- Homepage:
- Size: 258 KB
- Stars: 3
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# fontsdf
[![dependency status](https://deps.rs/repo/github/Overpeek/fontsdf/status.svg)](https://deps.rs/repo/github/Overpeek/fontsdf)
[![build status](https://github.com/Overpeek/fontsdf/actions/workflows/rust.yml/badge.svg)](https://github.com/Overpeek/fontsdf/actions)
[![crates.io](https://img.shields.io/crates/v/fontsdf.svg?label=fontsdf)](https://crates.io/crates/fontsdf)
[![docs.rs](https://docs.rs/fontsdf/badge.svg)](https://docs.rs/fontsdf/)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 | ✓ | |* :white_check_mark: means it is good at
### Example usage with `image`:
```rust
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:
- dual distance field (https://steamcdn-a.akamaihd.net/apps/valve/2007/SIGGRAPH2007_AlphaTestedMagnification.pdf)