From 95f0b4779dc413142c7438853dbc24a73218e24f Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sat, 28 Oct 2023 11:30:02 -0700 Subject: [PATCH 1/2] renderer/metal: reclaim cell buffer memory when resizing --- src/renderer/Metal.zig | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/renderer/Metal.zig b/src/renderer/Metal.zig index 4f41eadfd..d212c0163 100644 --- a/src/renderer/Metal.zig +++ b/src/renderer/Metal.zig @@ -1047,6 +1047,12 @@ pub fn setScreenSize( .strikethrough_thickness = old.strikethrough_thickness, }; + // Reset our buffer sizes so that we free memory when the screen shrinks. + // This could be made more clever by only doing this when the screen + // shrinks but the performance cost really isn't that much. + self.cells.clearAndFree(self.alloc); + self.cells_bg.clearAndFree(self.alloc); + log.debug("screen size screen={} grid={}, cell={}", .{ dim, grid_size, self.cell_size }); } From 06edc311a1e3fa4611f76fe47bd6e7580257bbc3 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sat, 28 Oct 2023 11:38:20 -0700 Subject: [PATCH 2/2] renderer/opengl: reclaim cell buffer memory when resizing --- src/renderer/OpenGL.zig | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/renderer/OpenGL.zig b/src/renderer/OpenGL.zig index 430148f73..120848940 100644 --- a/src/renderer/OpenGL.zig +++ b/src/renderer/OpenGL.zig @@ -1259,6 +1259,12 @@ pub fn setScreenSize( if (single_threaded_draw) self.draw_mutex.lock(); defer if (single_threaded_draw) self.draw_mutex.unlock(); + // Reset our buffer sizes so that we free memory when the screen shrinks. + // This could be made more clever by only doing this when the screen + // shrinks but the performance cost really isn't that much. + self.cells.clearAndFree(self.alloc); + self.cells_bg.clearAndFree(self.alloc); + // Store our screen size self.screen_size = dim; self.padding.explicit = pad;