Browse Source

can't use individual uniform buffer objects for each light

we want to allow for thousands of lights eventually for deferred
lighting, and most cards have a limit of less than 15
GL_MAX_FRAGMENT_UNIFORM_BLOCKS
testing
cinnaboot 6 years ago
parent
commit
688fee362d
  1. 3
      include/lights.h
  2. 7
      src/default_shaders.cpp
  3. 12
      src/lights.cpp

3
include/lights.h

@ -22,7 +22,8 @@ struct light_group
bool needs_update;
};
light_group* lightsInit(uint max_lights = 10);
// NOTE: max_lights should match the max_lights variable in the fragment shader
light_group* lightsInit(uint max_lights = 1000);
void lightsOut(light_group* lights);

7
src/default_shaders.cpp

@ -33,6 +33,8 @@ out vec4 color;
uniform mat4 model;
uniform mat3 normal_matrix;
uniform sampler2D sampler;
uniform uint num_lights = 0u;
struct point_light {
uint light_ID;
@ -40,11 +42,8 @@ struct point_light {
vec3 color;
float intensity;
};
#define MAX_LIGHTS 10
uniform point_light lights[MAX_LIGHTS];
uniform uint num_lights = 0u;
uniform sampler2D sampler;
uniform point_light lights[1000];
void main()

12
src/lights.cpp

@ -1,4 +1,6 @@
#include <sstream> // stringstream
#include "lights.h"
@ -34,22 +36,16 @@ lightsAdd(light_group* lights, glm::vec3 pos, glm::vec3 color, float intensity)
return true;
}
#include <sstream>
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, 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());
int light_pos_loc =
glGetUniformLocation(shader->program_id, ss.str().c_str());
glUniform3fv(light_pos_loc, 1, &lights->lights[i].position[0]);
}

Loading…
Cancel
Save