From 89fadfc2021a437caf5c2b584de71a14a34e826b Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Fri, 4 Oct 2024 06:57:42 -1000 Subject: [PATCH] renderer: fg/bg/cursor change must mark the screen as dirty Fixes #2372 --- src/renderer/Metal.zig | 6 ++++++ src/renderer/OpenGL.zig | 6 ++++++ src/renderer/Thread.zig | 3 +++ 3 files changed, 15 insertions(+) diff --git a/src/renderer/Metal.zig b/src/renderer/Metal.zig index ab64f8e4e..20c14cbad 100644 --- a/src/renderer/Metal.zig +++ b/src/renderer/Metal.zig @@ -745,6 +745,12 @@ fn displayLinkCallback( }; } +/// Mark the full screen as dirty so that we redraw everything. +pub fn markDirty(self: *Metal) void { + // This is how we force a full rebuild with metal. + self.cells_viewport = null; +} + /// Called when we get an updated display ID for our display link. pub fn setMacOSDisplayID(self: *Metal, id: u32) !void { if (comptime DisplayLink == void) return; diff --git a/src/renderer/OpenGL.zig b/src/renderer/OpenGL.zig index f9246aa22..5281a3c7f 100644 --- a/src/renderer/OpenGL.zig +++ b/src/renderer/OpenGL.zig @@ -645,6 +645,12 @@ pub fn hasVsync(self: *const OpenGL) bool { return false; } +/// See Metal. +pub fn markDirty(self: *OpenGL) void { + // Do nothing, we don't have dirty tracking yet. + _ = self; +} + /// Callback when the focus changes for the terminal this is rendering. /// /// Must be called on the render thread. diff --git a/src/renderer/Thread.zig b/src/renderer/Thread.zig index b3e54262d..35679e994 100644 --- a/src/renderer/Thread.zig +++ b/src/renderer/Thread.zig @@ -358,14 +358,17 @@ fn drainMailbox(self: *Thread) !void { .foreground_color => |color| { self.renderer.foreground_color = color; + self.renderer.markDirty(); }, .background_color => |color| { self.renderer.background_color = color; + self.renderer.markDirty(); }, .cursor_color => |color| { self.renderer.cursor_color = color; + self.renderer.markDirty(); }, .resize => |v| {