Code to update graphics buffer

This commit is contained in:
Kovid Goyal 2017-10-04 17:41:11 +05:30
parent 124a41643f
commit 8f05f752af
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
3 changed files with 11 additions and 5 deletions

View File

@ -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;
}
// }}}

View File

@ -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);

View File

@ -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);