Fixed fragment lights for Nvidia cards with 2048 max uniforms

This commit is contained in:
2014-03-13 13:00:36 +01:00
parent 5478b84508
commit f8f9203141
3 changed files with 12 additions and 11 deletions
+2 -1
View File
@@ -9,7 +9,7 @@ Renderer::Renderer()
m_SunPosition = glm::vec3(0, 10, 10); m_SunPosition = glm::vec3(0, 10, 10);
m_SunTarget = glm::vec3(0, 0, 0); m_SunTarget = glm::vec3(0, 0, 0);
m_SunProjection = glm::ortho<float>(-20, 20, -20, 20, -10, 20); m_SunProjection = glm::ortho<float>(-20, 20, -20, 20, -10, 20);
Lights = 512; Lights = 0;
} }
void Renderer::Initialize() void Renderer::Initialize()
@@ -187,6 +187,7 @@ void Renderer::DrawScene()
m_ShaderProgram.Bind(); m_ShaderProgram.Bind();
glUniformMatrix4fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "DepthMVP"), 1, GL_FALSE, glm::value_ptr(depthBiasMVP)); glUniformMatrix4fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "DepthMVP"), 1, GL_FALSE, glm::value_ptr(depthBiasMVP));
glUniform1i(glGetUniformLocation(m_ShaderProgram.GetHandle(), "numberOfLights"), Lights);
glUniform3fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "position"), Lights, Light_position.data()); glUniform3fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "position"), Lights, Light_position.data());
glUniform3fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "specular"), Lights, Light_specular.data()); glUniform3fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "specular"), Lights, Light_specular.data());
glUniform3fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "diffuse"), Lights, Light_diffuse.data()); glUniform3fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "diffuse"), Lights, Light_diffuse.data());
+1 -1
View File
@@ -29,7 +29,6 @@ public:
glm::mat4 projectionMatrix; glm::mat4 projectionMatrix;
int HEIGHT, WIDTH; int HEIGHT, WIDTH;
float Lights;
struct ModelData struct ModelData
{ {
@@ -40,6 +39,7 @@ public:
}; };
std::vector<ModelData*> ModelsToRender; std::vector<ModelData*> ModelsToRender;
int Lights;
std::vector<float> Light_position; std::vector<float> Light_position;
std::vector<float> Light_specular; std::vector<float> Light_specular;
std::vector<float> Light_diffuse; std::vector<float> Light_diffuse;
+9 -9
View File
@@ -6,15 +6,15 @@ uniform mat4 view;
layout(binding=0) uniform sampler2D texture0; layout(binding=0) uniform sampler2D texture0;
layout(binding=1) uniform sampler2D shadowMap; layout(binding=1) uniform sampler2D shadowMap;
const int numberOfLights = 128; const int maxNumberOfLights = 82;
uniform int numberOfLights;
uniform vec3 position[numberOfLights]; uniform vec3 position[maxNumberOfLights];
uniform vec3 specular[numberOfLights]; uniform vec3 specular[maxNumberOfLights];
uniform vec3 diffuse[numberOfLights]; uniform vec3 diffuse[maxNumberOfLights];
uniform float constantAttenuation[numberOfLights]; uniform float constantAttenuation[maxNumberOfLights];
uniform float linearAttenuation[numberOfLights]; uniform float linearAttenuation[maxNumberOfLights];
uniform float quadraticAttenuation[numberOfLights]; uniform float quadraticAttenuation[maxNumberOfLights];
uniform float spotExponent[numberOfLights]; uniform float spotExponent[maxNumberOfLights];
in VertexData { in VertexData {
vec3 Position; vec3 Position;