summaryrefslogtreecommitdiff
path: root/source/game/game.cpp
blob: 337fe1132b135c7372ba5f58a8a9403111d5ebbc (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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "game.h"

void game_setup(GameState *state) {
    glUseProgram(state->triangle_sp);
    Mat4 projection = calcify_ortho4m(0.0f, state->width, 0.0f, state->height, 0.1f, 10.0f);
    i32 triangle_proj_loc = glGetUniformLocation(state->triangle_sp, "Projection");
    glUniformMatrix4fv(triangle_proj_loc, 1, 0, projection.buffer);
    glUseProgram(0);
};

void game_handle_event(GameState *state, GameEventType type) {
    switch (type) {
        case GAME_EVENT_RESIZE: {
            glUseProgram(state->triangle_sp);
            glViewport(0, 0, state->width, state->height);

            Mat4 projection = calcify_ortho4m(0.0f, state->width, 0.0f, state->height, 1.0f, 10.0f);
            i32 triangle_proj_loc = glGetUniformLocation(state->triangle_sp, "Projection");
            glUniformMatrix4fv(triangle_proj_loc,
                               1, 0, 
                               projection.buffer);
            glUseProgram(0);
        } break;

        default:
            break;
    }
}

void game_update_and_render(GameState *state) {
    glClearColor(0.1f, 0.1f, 0.1f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);

    glUseProgram(state->triangle_sp);
    Mat4 model = calcify_ident4m();
    Mat4 scale = calcify_scaling_matrix4m(105.0f, 95.0f);
    model = calcify_multiply4m(scale, model);

    Mat4 pos = calcify_translation_matrix4m(350.0f, 950.0f, -1.0f);
    model = calcify_multiply4m(pos, model);
    i32 model_loc = glGetUniformLocation(state->triangle_sp,
                                         "Model");
    glUniformMatrix4fv(
                model_loc,
                1, 0,
                model.buffer
                );

    Vec3 Color = (Vec3){.r=0.4,.g=0.9,.b=0.7};
    glUniform3f(glGetUniformLocation(state->triangle_sp,
                                     "Color"),
                 Color.r, Color.g, Color.b);
    glBindVertexArray(state->triangle_vao);
    glDrawArrays(GL_TRIANGLES, 0, 3);
    glBindVertexArray(0);
}