Просмотр исходного кода

Fixed lights not being sent correctly to the shaders

Ivan Safrin 11 лет назад
Родитель
Сommit
71af71e684
1 измененных файлов с 101 добавлено и 102 удалено
  1. 101 102
      Core/Contents/Source/PolyGLSLShaderModule.cpp

+ 101 - 102
Core/Contents/Source/PolyGLSLShaderModule.cpp

@@ -292,33 +292,32 @@ bool GLSLShaderModule::applyShaderMaterial(Renderer *renderer, Material *materia
 			ambientVal[0] = renderer->ambientColor.r;
 			ambientVal[1] = renderer->ambientColor.g;
 			ambientVal[2] = renderer->ambientColor.b;										
-			ambientVal[3] = 1;
-		
-		GLfloat data4[] = {light.color.x * light.intensity, light.color.y * light.intensity, light.color.z * light.intensity, 1.0};					
-		glLightfv (GL_LIGHT0+lightIndex, GL_DIFFUSE, data4);
-		
-		data4[0] = light.specularColor.r* light.intensity;
-		data4[1] = light.specularColor.g* light.intensity;
-		data4[2] = light.specularColor.b* light.intensity;
-		data4[3] = light.specularColor.a* light.intensity;
-		glLightfv (GL_LIGHT0+lightIndex, GL_SPECULAR, data4);				
-			
-		data4[3] = 1.0;
-			
-		glLightfv (GL_LIGHT0+lightIndex, GL_AMBIENT, ambientVal);		
-		glLightf (GL_LIGHT0+lightIndex, GL_SPOT_CUTOFF, 180);
-
-		data4[0] = light.position.x;
-		data4[1] = light.position.y;
-		data4[2] = light.position.z;
-		glLightfv (GL_LIGHT0+lightIndex, GL_POSITION, data4);		
-
-		glLightf (GL_LIGHT0+lightIndex, GL_CONSTANT_ATTENUATION, light.constantAttenuation);		
-		glLightf (GL_LIGHT0+lightIndex, GL_LINEAR_ATTENUATION, light.linearAttenuation);				
-		glLightf (GL_LIGHT0+lightIndex, GL_QUADRATIC_ATTENUATION, light.quadraticAttenuation);				
-		
-		} 			
-		lightIndex++;
+            ambientVal[3] = 1;
+            
+            GLfloat data4[] = {light.color.x * light.intensity, light.color.y * light.intensity, light.color.z * light.intensity, 1.0};
+            glLightfv (GL_LIGHT0+lightIndex, GL_DIFFUSE, data4);
+            
+            data4[0] = light.specularColor.r* light.intensity;
+            data4[1] = light.specularColor.g* light.intensity;
+            data4[2] = light.specularColor.b* light.intensity;
+            data4[3] = light.specularColor.a* light.intensity;
+            glLightfv (GL_LIGHT0+lightIndex, GL_SPECULAR, data4);				
+                
+            data4[3] = 1.0;
+                
+            glLightfv (GL_LIGHT0+lightIndex, GL_AMBIENT, ambientVal);		
+            glLightf (GL_LIGHT0+lightIndex, GL_SPOT_CUTOFF, 180);
+
+            data4[0] = light.position.x;
+            data4[1] = light.position.y;
+            data4[2] = light.position.z;
+            glLightfv (GL_LIGHT0+lightIndex, GL_POSITION, data4);		
+
+            glLightf (GL_LIGHT0+lightIndex, GL_CONSTANT_ATTENUATION, light.constantAttenuation);		
+            glLightf (GL_LIGHT0+lightIndex, GL_LINEAR_ATTENUATION, light.linearAttenuation);				
+            glLightf (GL_LIGHT0+lightIndex, GL_QUADRATIC_ATTENUATION, light.quadraticAttenuation);				
+            lightIndex++;
+		}
 	}
 
 	vector<LightInfo> spotLights = renderer->getSpotLights();
@@ -346,82 +345,82 @@ bool GLSLShaderModule::applyShaderMaterial(Renderer *renderer, Material *materia
 			ambientVal[2] = renderer->ambientColor.b;										
 			ambientVal[3] = 1;
 		
-		GLfloat data4[] = {light.color.x * light.intensity, light.color.y * light.intensity, light.color.z * light.intensity, 1.0};					
-		glLightfv (GL_LIGHT0+lightIndex, GL_DIFFUSE, data4);
-		
-		data4[0] = light.specularColor.r* light.intensity;
-		data4[1] = light.specularColor.g* light.intensity;
-		data4[2] = light.specularColor.b* light.intensity;
-		data4[3] = light.specularColor.a* light.intensity;
-		glLightfv (GL_LIGHT0+lightIndex, GL_SPECULAR, data4);		
-			
-		data4[3] = 1.0;			
-			
-		glLightfv (GL_LIGHT0+lightIndex, GL_AMBIENT, ambientVal);		
-		glLightf (GL_LIGHT0+lightIndex, GL_SPOT_CUTOFF, light.spotlightCutoff);
-
-		glLightf (GL_LIGHT0+lightIndex, GL_SPOT_EXPONENT, light.spotlightExponent);
-		
-		data4[0] = dir.x;
-		data4[1] = dir.y;
-		data4[2] = dir.z;
-		glLightfv (GL_LIGHT0+lightIndex, GL_SPOT_DIRECTION, data4);
-
-		data4[0] = pos.x;
-		data4[1] = pos.y;
-		data4[2] = pos.z;
-		glLightfv (GL_LIGHT0+lightIndex, GL_POSITION, data4);		
-
-		glLightf (GL_LIGHT0+lightIndex, GL_CONSTANT_ATTENUATION, light.constantAttenuation);		
-		glLightf (GL_LIGHT0+lightIndex, GL_LINEAR_ATTENUATION, light.linearAttenuation);				
-		glLightf (GL_LIGHT0+lightIndex, GL_QUADRATIC_ATTENUATION, light.quadraticAttenuation);				
-		
-		if(light.shadowsEnabled) {		
-			if(shadowMapTextureIndex < 4) {
-				switch(shadowMapTextureIndex) {
-					case 0:
-						strcpy(texName, "shadowMap0");
-						strcpy(matName, "shadowMatrix0");						
-					break;
-					case 1:
-						strcpy(texName, "shadowMap1");
-						strcpy(matName, "shadowMatrix1");												
-					break;
-					case 2:
-						strcpy(texName, "shadowMap2");
-						strcpy(matName, "shadowMatrix2");																		
-					break;
-					case 3:
-						strcpy(texName, "shadowMap3");
-						strcpy(matName, "shadowMatrix3");																		
-					break;							
-				}
-			
-				int texture_location = glGetUniformLocation(glslShader->shader_id, texName);
-				glUniform1i(texture_location, textureIndex);
-				glActiveTexture(GL_TEXTURE0 + textureIndex);		
-				glBindTexture(GL_TEXTURE_2D, ((OpenGLTexture*)light.shadowMapTexture)->getTextureID());	
-				textureIndex++;
-				
-				int mloc = glGetUniformLocation(glslShader->shader_id, matName);
-				light.textureMatrix = light.textureMatrix;
-				
-			
-				GLfloat mat[16];
-				for(int z=0; z < 16; z++) {
-					mat[z] = light.textureMatrix.ml[z];
-				}
-				glUniformMatrix4fv(mloc, 1, false, mat);
-		
-					
-			}
-			shadowMapTextureIndex++;
+            GLfloat data4[] = {light.color.x * light.intensity, light.color.y * light.intensity, light.color.z * light.intensity, 1.0};
+            glLightfv (GL_LIGHT0+lightIndex, GL_DIFFUSE, data4);
+            
+            data4[0] = light.specularColor.r* light.intensity;
+            data4[1] = light.specularColor.g* light.intensity;
+            data4[2] = light.specularColor.b* light.intensity;
+            data4[3] = light.specularColor.a* light.intensity;
+            glLightfv (GL_LIGHT0+lightIndex, GL_SPECULAR, data4);		
+                
+            data4[3] = 1.0;			
+                
+            glLightfv (GL_LIGHT0+lightIndex, GL_AMBIENT, ambientVal);		
+            glLightf (GL_LIGHT0+lightIndex, GL_SPOT_CUTOFF, light.spotlightCutoff);
+
+            glLightf (GL_LIGHT0+lightIndex, GL_SPOT_EXPONENT, light.spotlightExponent);
+            
+            data4[0] = dir.x;
+            data4[1] = dir.y;
+            data4[2] = dir.z;
+            glLightfv (GL_LIGHT0+lightIndex, GL_SPOT_DIRECTION, data4);
+
+            data4[0] = pos.x;
+            data4[1] = pos.y;
+            data4[2] = pos.z;
+            glLightfv (GL_LIGHT0+lightIndex, GL_POSITION, data4);		
+
+            glLightf (GL_LIGHT0+lightIndex, GL_CONSTANT_ATTENUATION, light.constantAttenuation);		
+            glLightf (GL_LIGHT0+lightIndex, GL_LINEAR_ATTENUATION, light.linearAttenuation);				
+            glLightf (GL_LIGHT0+lightIndex, GL_QUADRATIC_ATTENUATION, light.quadraticAttenuation);				
+            
+            if(light.shadowsEnabled) {
+                if(shadowMapTextureIndex < 4) {
+                    switch(shadowMapTextureIndex) {
+                        case 0:
+                            strcpy(texName, "shadowMap0");
+                            strcpy(matName, "shadowMatrix0");						
+                        break;
+                        case 1:
+                            strcpy(texName, "shadowMap1");
+                            strcpy(matName, "shadowMatrix1");												
+                        break;
+                        case 2:
+                            strcpy(texName, "shadowMap2");
+                            strcpy(matName, "shadowMatrix2");																		
+                        break;
+                        case 3:
+                            strcpy(texName, "shadowMap3");
+                            strcpy(matName, "shadowMatrix3");																		
+                        break;							
+                    }
+                
+                    int texture_location = glGetUniformLocation(glslShader->shader_id, texName);
+                    glUniform1i(texture_location, textureIndex);
+                    glActiveTexture(GL_TEXTURE0 + textureIndex);		
+                    glBindTexture(GL_TEXTURE_2D, ((OpenGLTexture*)light.shadowMapTexture)->getTextureID());	
+                    textureIndex++;
+                    
+                    int mloc = glGetUniformLocation(glslShader->shader_id, matName);
+                    light.textureMatrix = light.textureMatrix;
+                    
+                
+                    GLfloat mat[16];
+                    for(int z=0; z < 16; z++) {
+                        mat[z] = light.textureMatrix.ml[z];
+                    }
+                    glUniformMatrix4fv(mloc, 1, false, mat);
+            
+                        
+                }
+                shadowMapTextureIndex++;
+            } else {
+                light.shadowsEnabled = false;
+            }
+            
+            lightIndex++;
 		}
-	else {							
-			light.shadowsEnabled = false;
-		}		
-		} 	
-		lightIndex++;
 	}
 	glPopMatrix();