aboutsummaryrefslogtreecommitdiff
#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);
}