summaryrefslogtreecommitdiff
path: root/src/game
diff options
context:
space:
mode:
authorpryazha <pryadeiniv@mail.ru>2025-02-20 15:10:59 +0500
committerpryazha <pryadeiniv@mail.ru>2025-02-20 15:10:59 +0500
commit60bd06ced6de9f1272e31da323996db2d8b8a531 (patch)
tree1c076b26f26f57351f7572495ba9160b6f8c4a57 /src/game
initial
Diffstat (limited to 'src/game')
-rw-r--r--src/game/game.c41
-rw-r--r--src/game/game.h11
2 files changed, 52 insertions, 0 deletions
diff --git a/src/game/game.c b/src/game/game.c
new file mode 100644
index 0000000..25c71fa
--- /dev/null
+++ b/src/game/game.c
@@ -0,0 +1,41 @@
+void game_init(State *state)
+{
+ U64 persistent_size = Megabytes(1);
+ state->persistent_arena = arena_alloc(persistent_size);
+ state->shader = create_shader_program(str8lit("shaders/default.vert"),
+ str8lit("shaders/default.frag"));
+ Vertex verts[] = {
+ vertex(v3(-0.5f, -0.5f, 0.0f)),
+ vertex(v3(0.0f, 0.5f, 0.0f)),
+ vertex(v3(0.5f, -0.5f, 0.0f))
+ };
+
+ U32 indices[] = { 0, 1, 2 };
+
+ state->the_mesh = mesh(state->persistent_arena, verts, ArrayCount(verts), indices, ArrayCount(indices));
+}
+
+void game_update_and_render(State *state, Input *input)
+{
+ /* NOTE(pryazha): Update */
+ if (key_is_pressed(input->exit))
+ input->is_running = 0;
+
+ /* NOTE(pryazha): Render */
+ glClearColor(0.15f, 0.15f, 0.15f, 1.0f);
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ glUseProgram(state->shader);
+ F32 angle = 20.0f*state->t;
+ Mat4 model = mat4rotate(MAT4_IDENTITY, v3(0.0f, 0.0f, angle));
+ shader_set_mat4fv(state->shader, "model", model);
+ mesh_draw(*state->the_mesh);
+ glUseProgram(0);
+
+ state->t += input->dt;
+}
+
+void game_clear(State *state)
+{
+ arena_release(state->persistent_arena);
+}
diff --git a/src/game/game.h b/src/game/game.h
new file mode 100644
index 0000000..b37798d
--- /dev/null
+++ b/src/game/game.h
@@ -0,0 +1,11 @@
+#ifndef GAME_H
+#define GAME_H
+
+typedef struct {
+ Arena *persistent_arena;
+ U32 shader;
+ Mesh *the_mesh;
+ F32 t;
+} State;
+
+#endif /* GAME_H */