1 #include <linmath.h/linmath.h>
2 #include "client/camera.h"
3 #include "client/gl_debug.h"
4 #include "client/light.h"
7 void light_shader_locate(LightShader *shader)
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
16 void light_shader_update(LightShader *shader)
18 vec4 base_sunlight_dir = {0.0f, 0.0f, -1.0f, 1.0f};
21 mat4x4_identity(sunlight_mat);
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);
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);
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