Skip to content

Conversation

@valadaptive
Copy link
Contributor

  • Closes N/A
  • I have followed the instructions in the PR template

I'll probably come back to this and clean it up a bit. This PR reimplements ab_glyph's functionality on top of Skrifa, a somewhat lower-level font API that's being used in Chrome now.

Skrifa doesn't perform rasterization itself, so I'm using vello_cpu from the Linebender project for rasterization. It's still in its early days, but I believe it's already quite fast. It also supports color and gradient fills, so color emoji support will be easier.

Skrifa also supports font hinting, which should make text look a bit nicer / less blurry.

Here's the current ab_glyph rendering:

image

Here's Skrifa without hinting--it looks almost identical, but there are some subpixel differences, probably due to rasterizer behavior:

image

Here's Skrifa with hinting:

image

Hinting does make the horizontal strokes look a bit bolder, which makes me wonder once again about increasing the font weight from "light" to "regular".

@github-actions
Copy link

github-actions bot commented Nov 10, 2025

Preview available at https://egui-pr-preview.github.io/pr/7694-skrifa
Note that it might take a couple seconds for the update to show up after the preview_build workflow has completed.

View snapshot changes at kitdiff

@emilk
Copy link
Owner

emilk commented Nov 14, 2025

I'm very excited for this! The readability improvements of the font hinting is pretty big imho. Also: colored emojis unlocked???

Before we merge I want to make sure we measure what impact this has on the .wasm blob size (./scripts/build_demo_web.sh --release before/after).

@nicoburns
Copy link

Regarding the quality of the rendering, I have found that adding "font embolden" (aka stem darkening) to the skrifa-based renderers is (subjectively) a big additional improvement, at least on macOS (by tweaking the embolden parameter I can make the rendering very close if not identical to Skia/Chrome).

There's no implementation for vello_cpu yet, but there's a PR for Vello Classic, and in theory a CPU-side implementation ought to be easier.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants