diff --git a/kitty/graphics.c b/kitty/graphics.c index 18872ea61..5edc0bdde 100644 --- a/kitty/graphics.c +++ b/kitty/graphics.c @@ -564,11 +564,11 @@ cmp_by_zindex_and_image(const void *a_, const void *b_) { return ans; } -void +bool grman_update_layers(GraphicsManager *self, unsigned int scrolled_by, float screen_left, float screen_top, float dx, float dy, unsigned int num_cols, unsigned int num_rows) { if (self->last_scrolled_by != scrolled_by) self->layers_dirty = true; self->last_scrolled_by = scrolled_by; - if (!self->layers_dirty) return; + if (!self->layers_dirty) return false; self->layers_dirty = false; size_t i, j; self->num_of_negative_refs = 0; self->num_of_positive_refs = 0; @@ -599,7 +599,7 @@ grman_update_layers(GraphicsManager *self, unsigned int scrolled_by, float scree rd->src_rect = ref->src_rect; rd->dest_rect = r; rd->texture_id = img->texture_id; }} - if (!self->count) return; + if (!self->count) return false; // Sort visible refs in draw order (z-index, img) qsort(self->render_data, self->count, sizeof(ImageRenderData), cmp_by_zindex_and_image); // Calculate the group counts @@ -612,6 +612,7 @@ grman_update_layers(GraphicsManager *self, unsigned int scrolled_by, float scree } self->render_data[start].group_count = i - start; } + return true; } // }}} diff --git a/kitty/graphics.h b/kitty/graphics.h index 08ed02e78..e5da9837d 100644 --- a/kitty/graphics.h +++ b/kitty/graphics.h @@ -78,4 +78,4 @@ PyTypeObject GraphicsManager_Type; GraphicsManager* grman_realloc(GraphicsManager *, index_type lines, index_type columns); void grman_clear(GraphicsManager*); const char* grman_handle_command(GraphicsManager *self, const GraphicsCommand *g, const uint8_t *payload, Cursor *c, bool *is_dirty); -void grman_update_layers(GraphicsManager *self, unsigned int scrolled_by, float screen_left, float screen_top, float dx, float dy, unsigned int num_cols, unsigned int num_rows); +bool grman_update_layers(GraphicsManager *self, unsigned int scrolled_by, float screen_left, float screen_top, float dx, float dy, unsigned int num_cols, unsigned int num_rows); diff --git a/kitty/shaders.c b/kitty/shaders.c index c04c0f4b3..f50a2075e 100644 --- a/kitty/shaders.c +++ b/kitty/shaders.c @@ -287,7 +287,12 @@ cell_prepare_to_render(ssize_t vao_idx, Screen *screen, GLfloat xstart, GLfloat unmap_vao_buffer(vao_idx, selection_buffer); address = NULL; } - grman_update_layers(screen->grman, screen->scrolled_by, xstart, ystart, dx, dy, screen->columns, screen->lines); + if (grman_update_layers(screen->grman, screen->scrolled_by, xstart, ystart, dx, dy, screen->columns, screen->lines)) { + sz = sizeof(ImageRenderData) * screen->grman->count; + address = alloc_and_map_vao_buffer(vao_idx, sz, graphics_buffer, GL_STREAM_DRAW, GL_WRITE_ONLY); + memcpy(address, screen->grman->render_data, sz); + unmap_vao_buffer(vao_idx, graphics_buffer); address = NULL; + } cell_update_uniform_block(vao_idx, screen, uniform_buffer, xstart, ystart, dx, dy, cursor);