]> git.lizzy.rs Git - dragonblocks_alpha.git/blob - src/client/light.c
Make texture batching optional (for OpenGL 3.3 compat)
[dragonblocks_alpha.git] / src / client / light.c
1 #include <linmath.h>
2 #include "client/camera.h"
3 #include "client/opengl.h"
4 #include "client/light.h"
5 #include "common/day.h"
6
7 void light_shader_locate(LightShader *shader)
8 {
9         shader->loc_daylight = glGetUniformLocation(shader->prog, "daylight"); GL_DEBUG
10         shader->loc_fogColor = glGetUniformLocation(shader->prog, "fogColor"); GL_DEBUG
11         shader->loc_ambientLight = glGetUniformLocation(shader->prog, "ambientLight"); GL_DEBUG
12         shader->loc_lightDir = glGetUniformLocation(shader->prog, "lightDir"); GL_DEBUG
13         shader->loc_cameraPos = glGetUniformLocation(shader->prog, "cameraPos"); GL_DEBUG
14 }
15
16 void light_shader_update(LightShader *shader)
17 {
18         vec4 base_sunlight_dir = {0.0f, 0.0f, -1.0f, 1.0f};
19         vec4 sunlight_dir;
20         mat4x4 sunlight_mat;
21         mat4x4_identity(sunlight_mat);
22
23         mat4x4_rotate(sunlight_mat, sunlight_mat, 1.0f, 0.0f, 0.0f, get_sun_angle() + M_PI / 2.0f);
24         mat4x4_mul_vec4(sunlight_dir, sunlight_mat, base_sunlight_dir);
25
26         f32 daylight = get_daylight();
27         f32 ambient_light = f32_mix(0.3f, 0.7f, daylight);
28         v3f32 fog_color = v3f32_mix((v3f32) {0x03, 0x0A, 0x1A}, (v3f32) {0x87, 0xCE, 0xEB}, daylight);
29
30         glProgramUniform1f(shader->prog, shader->loc_daylight, daylight); GL_DEBUG
31         glProgramUniform3f(shader->prog, shader->loc_fogColor, fog_color.x / 0xFF * ambient_light, fog_color.y / 0xFF * ambient_light, fog_color.z / 0xFF * ambient_light); GL_DEBUG
32         glProgramUniform1f(shader->prog, shader->loc_ambientLight, ambient_light); GL_DEBUG
33         glProgramUniform3f(shader->prog, shader->loc_lightDir, sunlight_dir[0], sunlight_dir[1], sunlight_dir[2]); GL_DEBUG
34         glProgramUniform3f(shader->prog, shader->loc_cameraPos, camera.eye[0], camera.eye[1], camera.eye[2]); GL_DEBUG
35 }