From ddd7ef537764922fa5140f24dd61b4d7daeafde9 Mon Sep 17 00:00:00 2001 From: Raphael Amorim Date: Fri, 24 Apr 2026 15:17:15 +0200 Subject: [PATCH] fix all time gpu submission --- frontends/rioterm/src/renderer/mod.rs | 11 +++++++---- frontends/rioterm/src/screen/mod.rs | 16 ++++++++++------ 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/frontends/rioterm/src/renderer/mod.rs b/frontends/rioterm/src/renderer/mod.rs index 8d19c37e..e7c8c95f 100644 --- a/frontends/rioterm/src/renderer/mod.rs +++ b/frontends/rioterm/src/renderer/mod.rs @@ -229,7 +229,8 @@ impl Renderer { sugarloaf: &mut Sugarloaf, context_manager: &mut ContextManager, focused_match: &Option>, - ) -> Option { + ) -> (Option, bool) { + let mut any_panel_dirty = false; let grid = context_manager.current_grid_mut(); let active_key = grid.current; let grid_scaled_margin = grid.get_scaled_margin(); @@ -279,12 +280,14 @@ impl Renderer { let force_full_damage = has_active_changed || self.is_game_mode_enabled; + let is_dirty = context.renderable_content.pending_update.is_dirty(); + // Check if we need to render - if !context.renderable_content.pending_update.is_dirty() && !force_full_damage - { + if !is_dirty && !force_full_damage { // No updates pending, skip rendering continue; } + any_panel_dirty = true; // UI-side damage (scroll, selection, resize, etc.) let ui_terminal_damage = context @@ -699,7 +702,7 @@ impl Renderer { None }; - window_update + (window_update, any_panel_dirty) } /// Check if the renderer needs continuous redraw (for animations) diff --git a/frontends/rioterm/src/screen/mod.rs b/frontends/rioterm/src/screen/mod.rs index 797a7309..901729ee 100644 --- a/frontends/rioterm/src/screen/mod.rs +++ b/frontends/rioterm/src/screen/mod.rs @@ -3421,11 +3421,13 @@ impl Screen<'_> { } } - let window_update = self.renderer.run( + let (window_update, any_panel_dirty) = self.renderer.run( &mut self.sugarloaf, &mut self.context_manager, &self.search_state.focused_match, ); + let has_animation = self.renderer.needs_redraw(); + let should_present = any_panel_dirty || has_animation; if self.renderer.custom_mouse_cursor { let scale = self.sugarloaf.scale_factor(); @@ -3845,10 +3847,12 @@ impl Screen<'_> { frame_grids.push((grid, uniforms)); } - if frame_grids.is_empty() { - self.sugarloaf.render(); - } else { - self.sugarloaf.render_with_grids(&mut frame_grids); + if should_present { + if frame_grids.is_empty() { + self.sugarloaf.render(); + } else { + self.sugarloaf.render_with_grids(&mut frame_grids); + } } } @@ -3856,7 +3860,7 @@ impl Screen<'_> { // indeterminate progress bar, trail cursor animation). UI-only // — terminal cells didn't change, but we want the next vsync // to fire a render so overlays/animations tick forward. - if self.renderer.needs_redraw() { + if has_animation { self.context_manager .current_mut() .renderable_content -- 2.54.0