ref: f3715001d77d5f3a83fc4976779728c215a05338
parent: 9ef30564239e08cc1f21fe2e04094fe015350ee8
author: Sigrid Haflínudóttir <[email protected]>
date: Thu Jan 2 15:12:23 EST 2020
reduce the amount of unneeded redraws by checking if commands got updated
--- a/demo/plan9.c
+++ b/demo/plan9.c
@@ -26,6 +26,8 @@
mu_Command *cmd;
mu_Context *ctx;
Biobuf *snarf;
+ char *oldcmds;
+ int oldcmdsidx;
USED(argc); USED(argv);
@@ -44,30 +46,34 @@
threadsetname("microui demo");
ctx = malloc(sizeof(mu_Context));
- r_init();
-
- /* init microui */
mu_init(ctx);
ctx->text_width = r_get_text_width;
ctx->text_height = r_get_text_height;
ctx->style->font = display->defaultfont;
+ r_init();
process_frame(ctx);
oldbuttons = 0;
+ oldcmds = malloc(sizeof(ctx->command_list.items));
+ oldcmdsidx = -1;
for (;;) {
process_frame(ctx);
- cmd = nil;
- r_clear(mu_color(bg[0], bg[1], bg[2], 255));
- while (mu_next_command(ctx, &cmd)) {
- switch (cmd->type) {
- case MU_COMMAND_TEXT: r_draw_text(ctx->style->font, cmd->text.str, cmd->text.pos, cmd->text.color); break;
- case MU_COMMAND_RECT: r_draw_rect(cmd->rect.rect, cmd->rect.color); break;
- case MU_COMMAND_ICON: r_draw_icon(cmd->icon.id, cmd->icon.rect, cmd->icon.color); break;
- case MU_COMMAND_CLIP: r_set_clip_rect(cmd->clip.rect); break;
+ if (oldcmdsidx != ctx->command_list.idx || memcmp(oldcmds, ctx->command_list.items, oldcmdsidx) != 0) {
+ oldcmdsidx = ctx->command_list.idx;
+ memmove(oldcmds, ctx->command_list.items, oldcmdsidx);
+ cmd = nil;
+ r_clear(mu_color(bg[0], bg[1], bg[2], 255));
+ while (mu_next_command(ctx, &cmd)) {
+ switch (cmd->type) {
+ case MU_COMMAND_TEXT: r_draw_text(ctx->style->font, cmd->text.str, cmd->text.pos, cmd->text.color); break;
+ case MU_COMMAND_RECT: r_draw_rect(cmd->rect.rect, cmd->rect.color); break;
+ case MU_COMMAND_ICON: r_draw_icon(cmd->icon.id, cmd->icon.rect, cmd->icon.color); break;
+ case MU_COMMAND_CLIP: r_set_clip_rect(cmd->clip.rect); break;
+ }
}
+ r_present();
}
- r_present();
gotevent = 1;
switch (alt(a)) {