#include // stringstream #include "lights.h" light_group* lightsInit(uint max_lights) { light_group* lg = UTIL_ALLOC(1, light_group); lg->lights = UTIL_ALLOC(max_lights, point_light); lg->max_lights = max_lights; return lg; } void lightsOut(light_group* lights) { utilSafeFree(lights->lights); utilSafeFree(lights); } bool lightsAdd(light_group* lights, glm::vec3 pos, glm::vec3 color, float intensity) { if (lights->num_lights == lights->max_lights) return false; point_light& pl = lights->lights[lights->num_lights]; pl.position = pos; pl.color = color; pl.intensity = intensity; lights->needs_update = true; lights->num_lights++; return true; } void lightsUpdate(light_group* lights, default_shader_program* shader) { glUniform1ui(shader->num_lights_id, lights->num_lights); for (uint i = 0; i < lights->num_lights; i++) { std::stringstream ss; ss << "lights[" << i << "].position"; int light_pos_loc = glGetUniformLocation(shader->program_id, ss.str().c_str()); glUniform3fv(light_pos_loc, 1, &lights->lights[i].position[0]); } lights->needs_update = false; }