summaryrefslogtreecommitdiff
path: root/src/game/game.c
blob: 25c71faea68f331b67c3513cde227b99ce4c9987 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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);
}