mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-05 04:06:08 -05:00
sixel: get rid of an ‘imul’ in sixel_add()
By storing the current row’s byte offset into the backing image in the terminal struct. This replaces the ‘imul’ with a load, which can potentially be slow. But, this data should already be in the cache.
This commit is contained in:
parent
dfdb42138d
commit
8c65c68b73
2 changed files with 5 additions and 2 deletions
6
sixel.c
6
sixel.c
|
|
@ -37,6 +37,7 @@ sixel_init(struct terminal *term)
|
|||
|
||||
term->sixel.state = SIXEL_DECSIXEL;
|
||||
term->sixel.pos = (struct coord){0, 0};
|
||||
term->sixel.row_byte_ofs = 0;
|
||||
term->sixel.color_idx = 0;
|
||||
term->sixel.max_col = 0;
|
||||
term->sixel.param = 0;
|
||||
|
|
@ -908,6 +909,7 @@ resize(struct terminal *term, int new_width, int new_height)
|
|||
term->sixel.image.data = new_data;
|
||||
term->sixel.image.width = new_width;
|
||||
term->sixel.image.height = new_height;
|
||||
term->sixel.row_byte_ofs = term->sixel.pos.row * new_width;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -931,8 +933,7 @@ sixel_add(struct terminal *term, uint32_t color, uint8_t sixel)
|
|||
return;
|
||||
}
|
||||
|
||||
size_t ofs = term->sixel.pos.row * term->sixel.image.width;
|
||||
ofs += term->sixel.pos.col;
|
||||
size_t ofs = term->sixel.row_byte_ofs + term->sixel.pos.col;
|
||||
|
||||
for (int i = 0; i < 6; i++, sixel >>= 1) {
|
||||
if (sixel & 1)
|
||||
|
|
@ -978,6 +979,7 @@ decsixel(struct terminal *term, uint8_t c)
|
|||
term->sixel.max_col = term->sixel.pos.col;
|
||||
term->sixel.pos.row += 6;
|
||||
term->sixel.pos.col = 0;
|
||||
term->sixel.row_byte_ofs += term->sixel.image.width * 6;
|
||||
break;
|
||||
|
||||
case '?': case '@': case 'A': case 'B': case 'C': case 'D': case 'E':
|
||||
|
|
|
|||
|
|
@ -521,6 +521,7 @@ struct terminal {
|
|||
} state;
|
||||
|
||||
struct coord pos; /* Current sixel coordinate */
|
||||
size_t row_byte_ofs; /* Byte position into image, for current row */
|
||||
int color_idx; /* Current palette index */
|
||||
int max_col; /* Largest column index we've seen (aka the image width) */
|
||||
uint32_t *private_palette; /* Private palette, used when private mode 1070 is enabled */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue