Releases: alexheretic/glyph-brush
Releases · alexheretic/glyph-brush
gfx-glyph 0.13
- Split crate creating layout project glyph-brush-layout and render API agnostic glyph-brush. gfx-glyph becomes a gfx-rs wrapper of glyph-brush. See glyph_brush changes & glyph_brush_layout changes.
gfx-glyph └── glyph-brush └── glyph-brush-layout
0.12.2
- Update rusttype ->
0.7
bringing multithreaded rasterization in the texture cache. This brings a significant reduction in worst case latency in multicore environments.name 0.6.4 ns/iter 0.7 ns/iter diff ns/iter diff % speedup cache::multi_font_population 8,239,309 2,570,034 -5,669,275 -68.81% x 3.21 cache_bad_cases::moving_text_thrashing 21,589,054 6,691,719 -14,897,335 -69.00% x 3.23 cache_bad_cases::resizing 15,162,054 4,607,499 -10,554,555 -69.61% x 3.29
- Improve cache resizing performance using the new rusttype API.
This release is semver compatible with rusttype 0.6.5
& 0.7
.
0.12.1
- Filter out of bounds glyphs in
VerticalAlign::Center
&VerticalAlign::Bottom
layouts before texture cache phase as an extra step that reduces later work & gpu texture cache max size requirements.
New benchmarks added for the v-align center & bottom worst-case performance of a very large section only showing a partial amount. Filtering yields a 1.2x speedup.
name control ns/iter change ns/iter diff ns/iter diff % speedup
no_cache_render_v_bottom_1_large_section_partially 12,412,793 10,342,991 -2,069,802 -16.67% x 1.20
no_cache_render_v_center_1_large_section_partially 12,408,500 10,305,646 -2,102,854 -16.95% x 1.20
render_v_bottom_1_large_section_partially 3,727 3,747 20 0.54% x 0.99
render_v_center_1_large_section_partially 3,727 3,726 -1 -0.03% x 1.00
0.12.0
- Layout code rework to a much cleaner implementation of layered iterators (#28)
- Fixes issues with varied sections having inherent soft-breaks between
SectionText
s. - Remove built in unicode normalization
- Breaks
GlyphPositioner
implementations (not much implemented outside this crate afaik). But is now simpler to implement. - Add
VerticalAlign::Bottom
,VerticalAlign::Center
(#33) - Fix single word larger than bounds issue (#34)
- Fixes issues with varied sections having inherent soft-breaks between
- Fix
BuiltInLineBreaker::AnyCharLineBreaker
mishandling byte-indices in some cases. - Remove deprecated functions.
- Support raw gfx render & depth views (#30)
- Use generic section hashing for
GlyphBrush
&GlyphCalculator
caches. This means the default section hashing can be overridden to a different algorithm if desired (similarly toHashMap
). - Use
seahash
by default for section hashing. Previously this was done with an xxHash. Seahash is a little slower for large sections, but faster for small ones. General usage see many small sections & few large ones so seahash seems a better default.
Performance
Worst-case (cache miss) benchmark performance, which is the most important area to improve, is hugely improved by the layout rework. 1.55-2.16x faster than 0.11
.
name control ns/iter change ns/iter diff ns/iter diff % speedup
no_cache_render_100_small_sections_fully 7,267,231 4,691,164 -2,576,067 -35.45% x 1.55
no_cache_render_1_large_section_partially 1,566,127 725,086 -841,041 -53.70% x 2.16
no_cache_render_3_medium_sections_fully 4,051,124 1,963,114 -2,088,010 -51.54% x 2.06
Best-case (cached) performance changes are generally less important, but the affect of moving from xxHash to seahash can be seen.
name control ns/iter change ns/iter diff ns/iter diff % speedup
render_100_small_sections_fully 34,219 24,757 -9,462 -27.65% x 1.38
render_1_large_section_partially 2,634 3,972 1,338 50.80% x 0.66
render_3_medium_sections_fully 1,584 1,504 -80 -5.05% x 1.05
0.11.0
- Optimise vertex generation using instanced rendering. Improves worst-case performance by 18-50%.
- Update rusttype ->
0.6
including large texture cache performance improvements.
Overall worst-case (cache miss) benchmark performance is improved by 42-74% compared with gfx-glyph 0.10.2
.
name control ns/iter change ns/iter diff ns/iter diff % speedup
no_cache_render_100_small_sections_fully 13,989,975 8,051,112 -5,938,863 -42.45% x 1.74
no_cache_render_1_large_section_partially 2,377,767 1,643,650 -734,117 -30.87% x 1.45
no_cache_render_3_medium_sections_fully 6,116,924 4,318,639 -1,798,285 -29.40% x 1.42
0.10.2
- Add
GlyphBrush::add_font
&GlyphBrush::add_font_bytes
0.10.1
- Use rusttype gpu-cache glyph padding to avoid glyph texture artifacts after transforms
- Use default bilinear filtering to improve transformed glyph rendering
- Remove unused dependencies
0.10.0
- Update rusttype ->
0.5
, see rusttype changelog.
Brings performance improvements.
name control ns/iter change ns/iter diff ns/iter diff % speedup
no_cache_render_100_small_sections_fully 16,510,001 16,022,255 -487,746 -2.95% x 1.03
no_cache_render_1_large_section_partially 4,404,936 4,381,983 -22,953 -0.52% x 1.01
no_cache_render_3_medium_sections_fully 11,041,238 10,963,063 -78,175 -0.71% x 1.01
0.9.1
- Switch to xxHashing for section caches
- Use upstream rusttype::gpu_cache (All changes are upstreamed and released)
Bench change since 0.9.0
name control.stdout ns/iter change.stdout ns/iter diff ns/iter diff % speedup
render_100_small_sections_fully 34,236 33,354 -882 -2.58% x 1.03
render_1_large_section_partially 6,970 2,535 -4,435 -63.63% x 2.75
render_3_medium_sections_fully 2,165 1,549 -616 -28.45% x 1.40
0.9.0
- Fix backtraces in warn logging when re-sizing the glyph texture cache
- Update rusttype 0.4