vtgl

terminal emulator implemented in OpenGL
git clone anongit@rnpnr.xyz:vtgl.git
Log | Files | Refs | Feed | LICENSE

Commit: bfa3e53438d2e2a9ac5e86a9d5661c3aa0e81723
Parent: 565b5361f44aa04fdf61f6290325d6f4881e9bdb
Author: Randy Palamar
Date:   Mon, 19 Aug 2024 06:29:39 -0600

ensure redraw on resize

Diffstat:
Mterminal.c | 2+-
Mutil.h | 3++-
Mvtgl.c | 8++++++--
3 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/terminal.c b/terminal.c @@ -952,5 +952,5 @@ blit_lines(Term *t, Arena a, size line_count) push_line(t, tv->lines.buf + line_idx, a); } - t->gl.flags &= ~NEEDS_FULL_BLIT; + t->gl.flags &= ~(NEEDS_FULL_BLIT|NEEDS_BLIT); } diff --git a/util.h b/util.h @@ -183,7 +183,8 @@ typedef struct { enum gl_flags { NEEDS_RESIZE = 1 << 0, - NEEDS_FULL_BLIT = 1 << 1, + NEEDS_BLIT = 1 << 1, + NEEDS_FULL_BLIT = 1 << 2, UPDATE_RENDER_UNIFORMS = 1 << 29, UPDATE_POST_UNIFORMS = 1 << 30, }; diff --git a/vtgl.c b/vtgl.c @@ -407,6 +407,7 @@ do_terminal(Term *t, Arena a) if (t->gl.flags & UPDATE_POST_UNIFORMS) update_uniforms(t, SHADER_POST); + size parsed_lines = 0; if (os_child_data_available(t->child)) { RingBuf *rb = &t->views[t->view_idx].log; if (os_child_exited(t->child)) { @@ -420,10 +421,13 @@ do_terminal(Term *t, Arena a) .len = t->unprocessed_bytes, .data = rb->buf + (rb->widx - t->unprocessed_bytes) }; - size parsed_lines = split_raw_input_to_lines(t, raw); - blit_lines(t, a, parsed_lines); + parsed_lines = split_raw_input_to_lines(t, raw); + t->gl.flags |= NEEDS_BLIT; } + if (t->gl.flags & (NEEDS_BLIT|NEEDS_FULL_BLIT)) + blit_lines(t, a, parsed_lines); + /* NOTE: reset the camera/viewport */ glUseProgram(t->gl.programs[SHADER_RENDER]); glUniform1i(t->gl.render.texslot, 0);