aboutsummaryrefslogtreecommitdiff
path: root/09-september/Draw.c
blob: 7138fb1c633020a25a5f81ac27f8790005267031 (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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include "game.h"

/*We upload all the light vectors*/
static const Light diffuseLight[4] =
{
    /* Sun Light */
    { {5.0f, 50.0f, 2.0f}, {1.0f, 1.0f, 1.0f, 1.0f}, {1.0f, 0.0f, 0.0f} },
    /* Other lights */
    { {10.0f, 20.0f, 0.0f}, {1.0f, 0.0f, 0.0f, 1.0f}, {1.0f, 0.01f, 0.002f} },
    { {20.0f, 20.0f, 0.0f}, {0.0f, 0.0f, 1.0f, 1.0f}, {1.0f, 0.01f, 0.002f} },
    { {30.0f, 20.0f, 0.0f}, {0.0f, 1.0f, 0.0f, 1.0f}, {1.0f, 0.01f, 0.002f} },
};

void Draw(Game *game)
{
    Mat4 viewMatrix, projectedViewMatrix, modelTransform, projectionMatrix;
    Vec3 pos = {-10.0, 70.0, 10.0};
    Vec3 viewDirection = {0.22, -0.77, -0.58};
    Vec3 up = {0.0f, 1.0f, 0.0f};

    Render_BeginFrame();
    shader_set_uniform_vec3(game->shaderProgram, "World_eyePosition", (float *)&game->camera->position);
    Render_LoadLights(game->shaderProgram, diffuseLight, 1);

    texture_bind(game->normalMap[1], 13);
    glUniform1i(game->shaderProgram->Normal_Map, 13);

    viewMatrix = mat4_lookAt(&pos, &viewDirection, &up);
    projectionMatrix = mat4_orthographic(-50.0f, 50.0f, -50.0f, 50.0f, -50.0f, 70.0f);
    //
    projectedViewMatrix = mat4_mul(&projectionMatrix, &viewMatrix);

    Render_DrawEntity(game->shaderProgram, &projectedViewMatrix, &game->player.entity);

    texture_bind(game->normalMap[0], 13);
    Render_DrawEntity(game->shaderProgram, &projectedViewMatrix, &game->ents[0]);

    Render_EndFrame();

    Vec3 t = {-1.0f, 10.0f, -1.0f};
    modelTransform = mat4_translate(&t);
    Mat4 temp = mat4_scale(10.0f, 10.0f, 10.0f);
    modelTransform = mat4_mul(&modelTransform, &temp);
    viewMatrix = camera_get_model_to_view_matrix(game->camera);
    projectionMatrix = game->camera->projectionMatrix;
    projectedViewMatrix = mat4_mul(&projectionMatrix, &viewMatrix);

    modelTransform = mat4_mul(&projectedViewMatrix, &modelTransform);

    glBindTexture(GL_TEXTURE_2D, render.shadow_map);
    glUseProgram(render.default_shader->id);
    glUniform1i(render.default_shader->Texture, 0);
    glUniformMatrix4fv(render.default_shader->totalTransform, 1, GL_FALSE, modelTransform.data);

    glBindVertexArray(render.default_quad->vao);
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
    glBindVertexArray(0);

    /*
    glUseProgram(game->terrainProgram->id);

    shader_set_uniform_vec3(game->terrainProgram, "World_eyePosition", (float *)&game->camera->position);
    Render_LoadLights(game->terrainProgram, diffuseLight, 1);

    Render_DrawTerrain(game->terrainProgram, &projectedViewMatrix, game->terrain);

    glUseProgram(game->skyboxProgram->id);
    Render_DrawSky(game->skyboxProgram, &viewMatrix, &game->camera->projectionMatrix, &game->sky);

    glUseProgram(game->particlesProgram->id);
    Render_DrawParticles(game->particlesProgram, &viewMatrix,
                         &game->camera->projectionMatrix);

    */
    glUseProgram(game->shaderProgram->id);
    window_update(game->window);
}