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| {