From 46efa1936ec44ece2167480ccf4fa1b3af1218bc Mon Sep 17 00:00:00 2001 From: Jack Jamison Date: Thu, 16 Oct 2025 11:53:16 -0400 Subject: you can type --- graphics.c | 13 +++++++------ graphics.h | 3 ++- input_field.c | 11 ++++++++++- main.c | 2 +- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/graphics.c b/graphics.c index 86b22d4..1ee8b08 100644 --- a/graphics.c +++ b/graphics.c @@ -146,7 +146,7 @@ typedef struct { float x, y, u, v; } vert_t; -void initTextBuffer(client_state* state, text_buffer_t* buffer, char* text, size_t text_len) { +void init_text_buffer(client_state* state, text_buffer_t* buffer, char* text, size_t text_len) { // generate openg bullshit glGenVertexArrays(1, &buffer->vao); glBindVertexArray(buffer->vao); @@ -197,11 +197,6 @@ void initTextBuffer(client_state* state, text_buffer_t* buffer, char* text, size pen_x += m->advance_x; } - for (int i = 0, n = 0; i < sizeof(vertices) / sizeof(vert_t); ++i, !(i % 4) ? n++ : false) { - vert_t v = vertices[i]; - printf("%c: (%f, %f, %f, %f)\n", text[n], v.x, v.y, v.u, v.v); - } - // vertex buffer glBindBuffer(GL_ARRAY_BUFFER, buffer->vbo); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); @@ -216,3 +211,9 @@ void initTextBuffer(client_state* state, text_buffer_t* buffer, char* text, size glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(vert_t), (void*)(2 * sizeof(float))); glEnableVertexAttribArray(1); } + +void destroy_text_buffer(text_buffer_t* buffer) { + glDeleteVertexArrays(1, &buffer->vao); + glDeleteBuffers(1, &buffer->vbo); + glDeleteBuffers(1, &buffer->ebo); +} diff --git a/graphics.h b/graphics.h index fc46ee8..f1f81b5 100644 --- a/graphics.h +++ b/graphics.h @@ -6,6 +6,7 @@ bool init_gl(client_state* state); void render_frame(client_state* state); -void initTextBuffer(client_state* state, text_buffer_t* buffer, char* text, size_t text_len); +void init_text_buffer(client_state* state, text_buffer_t* buffer, char* text, size_t text_len); +void destroy_text_buffer(text_buffer_t* buffer); #endif diff --git a/input_field.c b/input_field.c index 114019a..4bd09bb 100644 --- a/input_field.c +++ b/input_field.c @@ -2,6 +2,12 @@ #include "input_field.h" #include "array.h" +#include "graphics.h" + +void regenerate_text_buffer(client_state* state) { + destroy_text_buffer(&state->input_buffer_text); + init_text_buffer(state, &state->input_buffer_text, state->input_buffer, array_size(state->input_buffer)); +} bool type_key(client_state* state, xkb_keysym_t keysym) { bool ctrl = xkb_state_mod_name_is_active(state->xkb_state, XKB_MOD_NAME_CTRL, XKB_STATE_MODS_EFFECTIVE); @@ -18,6 +24,7 @@ bool type_key(client_state* state, xkb_keysym_t keysym) { // submit line if (keysym == XKB_KEY_Return || keysym == XKB_KEY_KP_Enter) { submit_line(state); + regenerate_text_buffer(state); return false; } @@ -28,6 +35,7 @@ bool type_key(client_state* state, xkb_keysym_t keysym) { } else { array_pop(state->input_buffer); } + regenerate_text_buffer(state); return true; } @@ -36,8 +44,9 @@ bool type_key(client_state* state, xkb_keysym_t keysym) { int len = xkb_keysym_to_utf8(keysym, buf, sizeof(buf)); if (len > 0) { for (int i = 0; i < strlen(buf); i++) { - array_add(state->input_buffer, buf[i]); + array_add(state->input_buffer, buf[i]); } + regenerate_text_buffer(state); return true; } diff --git a/main.c b/main.c index 13a6328..3ddc29f 100644 --- a/main.c +++ b/main.c @@ -74,7 +74,7 @@ int main() { // create font altas textures atlas_create_texture(&state); - initTextBuffer(&state, &state.input_buffer_text, "this is a gtest", strlen("this is a gtest")); + init_text_buffer(&state, &state.input_buffer_text, "", 0); // event loop while (state.running) { -- cgit v1.2.3