diff --git a/kitty/gl.h b/kitty/gl.h index e2ea6d0d5..f4518b3a5 100644 --- a/kitty/gl.h +++ b/kitty/gl.h @@ -90,6 +90,13 @@ static void update_viewport_size_impl(int w, int h) { glViewport(0, 0, w, h); check_gl(); } + +static void +free_texture_impl(GLuint *tex_id) { + glDeleteTextures(1, tex_id); check_gl(); + *tex_id = 0; +} + // }}} // Programs {{{ diff --git a/kitty/graphics.c b/kitty/graphics.c index 789e908d2..3f2021796 100644 --- a/kitty/graphics.c +++ b/kitty/graphics.c @@ -44,9 +44,11 @@ free_load_data(LoadData *ld) { ld->mapped_file = NULL; ld->mapped_file_sz = 0; } +free_texture_func free_texture = NULL; + static inline void free_image(Image *img) { - // TODO: free the texture if texture_id is not zero + if (img->texture_id) free_texture(&img->texture_id); free_load_data(&(img->load_data)); } diff --git a/kitty/shaders.c b/kitty/shaders.c index a74bc3b89..e3d28b711 100644 --- a/kitty/shaders.c +++ b/kitty/shaders.c @@ -560,6 +560,7 @@ init_shaders(PyObject *module) { draw_borders = &draw_borders_impl; draw_cells = &draw_cells_impl; draw_cursor = &draw_cursor_impl; + free_texture = &free_texture_impl; return true; } // }}} diff --git a/kitty/state.h b/kitty/state.h index 94092d1cd..7f538ce47 100644 --- a/kitty/state.h +++ b/kitty/state.h @@ -101,3 +101,4 @@ EXTERNAL_FUNC0(draw_borders, void); EXTERNAL_FUNC(draw_cells, void, ssize_t, float, float, float, float, Screen *, CursorRenderInfo *); EXTERNAL_FUNC(draw_cursor, void, CursorRenderInfo *); EXTERNAL_FUNC(update_viewport_size, void, int, int); +EXTERNAL_FUNC(free_texture, void, uint32_t*);