Browse Source

unbreak lights

testing
cinnaboot 6 years ago
parent
commit
0027ae04fa
  1. 35
      src/lights.cpp
  2. 7
      src/renderer.cpp

35
src/lights.cpp

@ -7,6 +7,7 @@ lightsInit(uint max_lights)
{ {
light_group* lg = UTIL_ALLOC(1, light_group); light_group* lg = UTIL_ALLOC(1, light_group);
lg->lights = UTIL_ALLOC(max_lights, point_light); lg->lights = UTIL_ALLOC(max_lights, point_light);
lg->max_lights = max_lights;
return lg; return lg;
} }
@ -20,35 +21,39 @@ lightsOut(light_group* lights)
bool bool
lightsAdd(light_group* lights, glm::vec3 pos, glm::vec3 color, float intensity) lightsAdd(light_group* lights, glm::vec3 pos, glm::vec3 color, float intensity)
{ {
return false; if (lights->num_lights == lights->max_lights)
} return false;
void point_light& pl = lights->lights[lights->num_lights];
lightsUpdate(light_group* lights, shader_program* shader) pl.position = pos;
{ pl.color = color;
// set shader max_lights uniform to match.. pl.intensity = intensity;
lights->needs_update = true;
lights->num_lights++;
return true;
} }
#if 0
#include <sstream> #include <sstream>
inline void void
updateLights(shader_program& shader, point_light* lights, uint num_lights) lightsUpdate(light_group* lights, shader_program* shader)
{ {
// set shader max_lights uniform to match..
// TODO: use Uniform Buffer Objects to update light data // 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/registry/OpenGL/extensions/ARB/ARB_uniform_buffer_object.txt
// https://www.khronos.org/opengl/wiki/Uniform_Buffer_Objects // 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++) { for (uint i = 0; i < lights->num_lights; i++) {
// TODO: don't do this every frame * every render_group
std::stringstream ss; std::stringstream ss;
ss << "lights[" << i << "].position"; 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

7
src/renderer.cpp

@ -128,7 +128,12 @@ renRenderFrame(render_state* rs)
bool bool
renAddLight(render_state* rs, glm::vec3 pos, glm::vec3 color, float intensity) 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;
} }

Loading…
Cancel
Save