Mercurial > repos > blastem
changeset 2011:579fe3f6fe76
Improved texture atlas size estimation in Nuklear
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 01 Nov 2020 12:35:08 -0800 |
parents | 19957e7353a4 |
children | b05295c2ad04 |
files | nuklear_ui/nuklear.h nuklear_ui/nuklear_sdl_gles2.h |
diffstat | 2 files changed, 16 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/nuklear_ui/nuklear.h Sun Nov 01 12:32:25 2020 -0800 +++ b/nuklear_ui/nuklear.h Sun Nov 01 12:35:08 2020 -0800 @@ -11368,10 +11368,13 @@ 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 @@ } *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;
--- a/nuklear_ui/nuklear_sdl_gles2.h Sun Nov 01 12:32:25 2020 -0800 +++ b/nuklear_ui/nuklear_sdl_gles2.h Sun Nov 01 12:35:08 2020 -0800 @@ -166,8 +166,13 @@ glBindTexture(GL_TEXTURE_2D, dev->font_tex); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + printf("Creating texture atlas texture with size %dx%d\n", width, height); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)width, (GLsizei)height, 0, GL_RGBA, GL_UNSIGNED_BYTE, image); + GLenum err = glGetError(); + if (err != GL_NO_ERROR) { + printf("glTexImage2D failed with error %d\n", err); + } } NK_API void