aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJack Jamison <jackqjamison@gmail.com>2025-10-16 11:53:16 -0400
committerJack Jamison <jackqjamison@gmail.com>2025-10-16 11:53:16 -0400
commit46efa1936ec44ece2167480ccf4fa1b3af1218bc (patch)
tree8c6363e1050a80f51361bf70a4e03906eebcdfd9
parent7f2c79d77de931d38d5359ba836f5b6dd77fdcc2 (diff)
you can type
-rw-r--r--graphics.c13
-rw-r--r--graphics.h3
-rw-r--r--input_field.c11
-rw-r--r--main.c2
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) {