diff options
Diffstat (limited to 'src/game/game.c')
-rw-r--r-- | src/game/game.c | 41 |
1 files changed, 41 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); +} |