From 0027ae04fac288119cbcdf73c9e20adec7703b03 Mon Sep 17 00:00:00 2001 From: cinnaboot Date: Wed, 18 Nov 2020 19:44:35 -0500 Subject: [PATCH] unbreak lights --- src/lights.cpp | 35 ++++++++++++++++++++--------------- src/renderer.cpp | 7 ++++++- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/src/lights.cpp b/src/lights.cpp index 6e2fb51..dad58fd 100644 --- a/src/lights.cpp +++ b/src/lights.cpp @@ -7,6 +7,7 @@ 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; } @@ -20,35 +21,39 @@ lightsOut(light_group* lights) bool lightsAdd(light_group* lights, glm::vec3 pos, glm::vec3 color, float intensity) { - return false; -} + if (lights->num_lights == lights->max_lights) + return false; -void -lightsUpdate(light_group* lights, shader_program* shader) -{ - // set shader max_lights uniform to match.. + 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; } -#if 0 #include -inline void -updateLights(shader_program& shader, point_light* lights, uint num_lights) +void +lightsUpdate(light_group* lights, shader_program* shader) { + // set shader max_lights uniform to match.. // TODO: use Uniform Buffer Objects to update light data // https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_uniform_buffer_object.txt // https://www.khronos.org/opengl/wiki/Uniform_Buffer_Objects - glUniform1ui(shader.num_lights_id, num_lights); + glUniform1ui(shader->num_lights_id, lights->num_lights); - for (uint i = 0; i < num_lights; i++) { - // TODO: don't do this every frame * every render_group + 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()); + int light_pos_loc = glGetUniformLocation(shader->program_id, ss.str().c_str()); - glUniform3fv(light_pos_loc, 1, &lights[i].position[0]); + glUniform3fv(light_pos_loc, 1, &lights->lights[i].position[0]); } + + lights->needs_update = false; } -#endif diff --git a/src/renderer.cpp b/src/renderer.cpp index 4146d6a..3c9e39d 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -128,7 +128,12 @@ renRenderFrame(render_state* rs) bool renAddLight(render_state* rs, glm::vec3 pos, glm::vec3 color, float intensity) { - return lightsAdd(rs->lights, pos, color, intensity); + if (!lightsAdd(rs->lights, pos, color, intensity)) { + LOG(Error) << "Error adding light\n"; + return false; + } + + return true; }