diff options
author | Mike Pavone <pavone@retrodev.com> | 2020-11-01 12:35:08 -0800 |
---|---|---|
committer | Mike Pavone <pavone@retrodev.com> | 2020-11-01 12:35:08 -0800 |
commit | 7ea6b7c380286ba6935fa1d904b70be2c82b74bf (patch) | |
tree | 4be5dd77e998051d0282b44bc1618a20b11787ce /nuklear_ui/nuklear.h | |
parent | 2c54fbbbedc03dfc028472c32489b11b7059c4b3 (diff) |
Improved texture atlas size estimation in Nuklear
Diffstat (limited to 'nuklear_ui/nuklear.h')
-rw-r--r-- | nuklear_ui/nuklear.h | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/nuklear_ui/nuklear.h b/nuklear_ui/nuklear.h index 4347f45..b28008c 100644 --- a/nuklear_ui/nuklear.h +++ b/nuklear_ui/nuklear.h @@ -11368,10 +11368,13 @@ nk_font_bake_pack(struct nk_font_baker *baker, NK_ASSERT(alloc); if (!image_memory || !width || !height || !config_list || !count) return nk_false; + int pixel_area_estimate = 0; for (config_iter = config_list; config_iter; config_iter = config_iter->next) { range_count = nk_range_count(config_iter->range); total_range_count += range_count; - total_glyph_count += nk_range_glyph_count(config_iter->range, range_count); + int glyphs = nk_range_glyph_count(config_iter->range, range_count); + total_glyph_count += glyphs; + pixel_area_estimate += glyphs * config_iter->size * config_iter->size; } /* setup font baker from temporary memory */ @@ -11382,7 +11385,13 @@ nk_font_bake_pack(struct nk_font_baker *baker, } *height = 0; - *width = (total_glyph_count > 1000) ? 1024 : 512; + int width_estimate = sqrt(pixel_area_estimate) + 0.5; + *width = 128; + while (*width < width_estimate) + { + *width *= 2; + } + //*width = (total_glyph_count > 1000) ? 1024 : 512; nk_tt_PackBegin(&baker->spc, 0, (int)*width, (int)max_height, 0, 1, alloc); { int input_i = 0; |