summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-05-13 21:35:26 -0400
committerMatthias Clasen <mclasen@redhat.com>2021-05-13 22:02:35 -0400
commitbc088d668340b2b02cd4c97d158cd944dea238ea (patch)
treecbaa3d90e2d79ef3bdcd3452b1c3594e15449ccd
parent8e7bc8d74264324bccc4334d9ead0aba2c048a0d (diff)
downloadgtk+-better-glyph-caching.tar.gz
ngl: Improve glyph cachingbetter-glyph-caching
Avoid creating duplicate cache entries with miniscule scale differences. It does not cost us much to use a slightly larger texture for a glyph.
-rw-r--r--gsk/ngl/gsknglrenderjob.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/gsk/ngl/gsknglrenderjob.c b/gsk/ngl/gsknglrenderjob.c
index d08d45a04f..0ebe3921cb 100644
--- a/gsk/ngl/gsknglrenderjob.c
+++ b/gsk/ngl/gsknglrenderjob.c
@@ -2837,6 +2837,7 @@ gsk_ngl_render_job_visit_text_node (GskNglRenderJob *job,
guint i;
int yshift;
float ypos;
+ float scale;
if (num_glyphs == 0)
return;
@@ -2847,8 +2848,13 @@ gsk_ngl_render_job_visit_text_node (GskNglRenderJob *job,
if (force_color || !gsk_text_node_has_color_glyphs (node))
rgba_to_half (color, c);
+ /* Avoid caching glyphs with miniscule scale differences */
+ scale = 1;
+ while (scale < text_scale)
+ scale *= 1.2;
+
lookup.font = (PangoFont *)font;
- lookup.scale = (guint) (text_scale * 1024);
+ lookup.scale = (guint) (scale * 1024);
yshift = compute_phase_and_pos (y, &ypos);