aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/world.cpp40
1 files changed, 24 insertions, 16 deletions
diff --git a/src/world.cpp b/src/world.cpp
index a52e3f3..e97ec56 100644
--- a/src/world.cpp
+++ b/src/world.cpp
@@ -669,22 +669,26 @@ LOOP2:
glActiveTexture(GL_TEXTURE0);
bgTex->bindNext();
+ GLfloat pointArray[light.size()][2];
+ for(uint w = 0; w < light.size(); w++){
+ pointArray[w][0] = light[w].loc.x - offset.x;
+ pointArray[w][1] = light[w].loc.y;
+ }
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); //for the s direction
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); //for the t direction
glUseProgram(shaderProgram);
glUniform1i(glGetUniformLocation(shaderProgram, "sampler"), 0);
glUniform1f(glGetUniformLocation(shaderProgram, "amb"), float(shade+50.0f)/100.0f);
if(p->light){
- glUniform2f(glGetUniformLocation(shaderProgram, "lightLocation"), p->loc.x - offset.x+SCREEN_WIDTH/2,p->loc.y);
+ glUniform1i(glGetUniformLocation(shaderProgram, "numLight"), 1);
+ glUniform2f(glGetUniformLocation(shaderProgram, "lightLocation"), p->loc.x - offset.x+SCREEN_WIDTH/2, p->loc.y);
glUniform3f(glGetUniformLocation(shaderProgram, "lightColor"), 1.0f,1.0f,1.0f);
- }else if(light.size() == 0){
- glUniform2f(glGetUniformLocation(shaderProgram, "lightLocation"), 0,-1000);
- glUniform3f(glGetUniformLocation(shaderProgram, "lightColor"), 0.0f,0.0f,0.0f);
+ }else if(!light.size()){
+ glUniform1i(glGetUniformLocation(shaderProgram, "numLight"), 0);
}else{
- for(auto &l : light){
- glUniform2f(glGetUniformLocation(shaderProgram, "lightLocation"), l.loc.x-offset.x,l.loc.y);
- glUniform3f(glGetUniformLocation(shaderProgram, "lightColor"), l.color.red,l.color.green,l.color.blue);
- }
+ glUniform1i(glGetUniformLocation(shaderProgram, "numLight"), light.size());
+ glUniform2fv(glGetUniformLocation(shaderProgram, "lightLocation"), light.size(), (GLfloat *)&pointArray);
+ glUniform3f(glGetUniformLocation(shaderProgram, "lightColor"), 1.0f,1.0f,1.0f);
}
glBegin(GL_QUADS);
@@ -1268,20 +1272,24 @@ void IndoorWorld::draw(Player *p){
*/
glEnable(GL_TEXTURE_2D);
+ GLfloat pointArray[light.size()][2];
+ for(uint w = 0; w < light.size(); w++){
+ pointArray[w][0] = light[w].loc.x - offset.x;
+ pointArray[w][1] = light[w].loc.y;
+ }
glUseProgram(shaderProgram);
glUniform1i(glGetUniformLocation(shaderProgram, "sampler"), 0);
glUniform1f(glGetUniformLocation(shaderProgram, "amb"), 0.0f);
if(p->light){
- glUniform2f(glGetUniformLocation(shaderProgram, "lightLocation"), p->loc.x - offset.x+SCREEN_WIDTH/2,p->loc.y);
+ glUniform1i(glGetUniformLocation(shaderProgram, "numLight"), 1);
+ glUniform2f(glGetUniformLocation(shaderProgram, "lightLocation"), p->loc.x - offset.x+SCREEN_WIDTH/2, p->loc.y);
glUniform3f(glGetUniformLocation(shaderProgram, "lightColor"), 1.0f,1.0f,1.0f);
- }else if(light.size() == 0){
- glUniform2f(glGetUniformLocation(shaderProgram, "lightLocation"), 0,-1000);
- glUniform3f(glGetUniformLocation(shaderProgram, "lightColor"), 0.0f,0.0f,0.0f);
+ }else if(!light.size()){
+ glUniform1i(glGetUniformLocation(shaderProgram, "numLight"), 0);
}else{
- for(auto &l : light){
- glUniform2f(glGetUniformLocation(shaderProgram, "lightLocation"), l.loc.x-offset.x,l.loc.y);
- glUniform3f(glGetUniformLocation(shaderProgram, "lightColor"), l.color.red,l.color.green,l.color.blue);
- }
+ glUniform1i(glGetUniformLocation(shaderProgram, "numLight"), light.size());
+ glUniform2fv(glGetUniformLocation(shaderProgram, "lightLocation"), light.size(), (GLfloat *)&pointArray);
+ glUniform3f(glGetUniformLocation(shaderProgram, "lightColor"), 1.0f,1.0f,1.0f);
}
bgTex->bind(0);