From 164adb78e30c6d5f36ef4e5d3141e07dd5779a29 Mon Sep 17 00:00:00 2001 From: Wez Furlong Date: Wed, 25 Nov 2020 16:13:53 -0800 Subject: [PATCH] wezterm: blow more caches when scaling changes The recent addition of dynamic fallback resolution highlighted this issue. The test scenario is: 1. Output some glyphs that need dynamic fallback 2. ctrl-+ to change the font scaling 3. rasterization fails because of some bad cached state; the font_idx's were invalidated by the scale change which reset the dynamically discovered fallback fonts. The resolution is to blow the glyph and shape caches when scaling is changed. --- wezterm-gui/src/gui/termwindow.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/wezterm-gui/src/gui/termwindow.rs b/wezterm-gui/src/gui/termwindow.rs index 0c9dbb818..f3ac1cce3 100644 --- a/wezterm-gui/src/gui/termwindow.rs +++ b/wezterm-gui/src/gui/termwindow.rs @@ -766,7 +766,7 @@ impl WindowCallbacks for TermWindow { break; } } else { - log::error!("paint_opengl_pass failed: {}", err); + log::error!("paint_opengl_pass failed: {:#}", err); break; } } @@ -2062,6 +2062,8 @@ impl TermWindow { self.fonts .change_scaling(font_scale, dimensions.dpi as f64 / 96.); self.render_metrics = RenderMetrics::new(&self.fonts); + self.render_state.opengl().glyph_cache.borrow_mut().clear(); + self.shape_cache.borrow_mut().clear(); self.recreate_texture_atlas(None) .expect("failed to recreate atlas");