diff --git a/modules/text_server_adv/text_server_adv.cpp b/modules/text_server_adv/text_server_adv.cpp index 55303452dea..8d6e3d23c2c 100644 --- a/modules/text_server_adv/text_server_adv.cpp +++ b/modules/text_server_adv/text_server_adv.cpp @@ -1230,8 +1230,22 @@ bool TextServerAdvanced::_ensure_glyph(FontAdvanced *p_font_data, const Vector2i HashMap::Iterator E = fd->glyph_map.find(p_glyph); if (E) { - r_glyph = E->value; - return E->value.found; + bool tx_valid = true; + if (E->value.texture_idx >= 0) { + if (E->value.texture_idx < fd->textures.size()) { + tx_valid = fd->textures[E->value.texture_idx].image.is_valid(); + } else { + tx_valid = false; + } + } + if (tx_valid) { + r_glyph = E->value; + return E->value.found; +#ifdef DEBUG_ENABLED + } else { + WARN_PRINT(vformat("Invalid texture cache for glyph %x in font %s, glyph will be re-rendered. Re-import this font to regenerate textures.", glyph_index, p_font_data->font_name)); +#endif + } } if (glyph_index == 0) { // Non graphical or invalid glyph, do not render. diff --git a/modules/text_server_fb/text_server_fb.cpp b/modules/text_server_fb/text_server_fb.cpp index 7edd1ed8487..94bda259bb7 100644 --- a/modules/text_server_fb/text_server_fb.cpp +++ b/modules/text_server_fb/text_server_fb.cpp @@ -651,8 +651,22 @@ bool TextServerFallback::_ensure_glyph(FontFallback *p_font_data, const Vector2i HashMap::Iterator E = fd->glyph_map.find(p_glyph); if (E) { - r_glyph = E->value; - return E->value.found; + bool tx_valid = true; + if (E->value.texture_idx >= 0) { + if (E->value.texture_idx < fd->textures.size()) { + tx_valid = fd->textures[E->value.texture_idx].image.is_valid(); + } else { + tx_valid = false; + } + } + if (tx_valid) { + r_glyph = E->value; + return E->value.found; +#ifdef DEBUG_ENABLED + } else { + WARN_PRINT(vformat("Invalid texture cache for glyph %x in font %s, glyph will be re-rendered. Re-import this font to regenerate textures.", glyph_index, p_font_data->font_name)); +#endif + } } if (glyph_index == 0) { // Non graphical or invalid glyph, do not render.