Skip to content

Commit 71af71e

Browse files
committed
Fixed lights not being sent correctly to the shaders
1 parent 9be0dd0 commit 71af71e

File tree

1 file changed

+101
-102
lines changed

1 file changed

+101
-102
lines changed

Core/Contents/Source/PolyGLSLShaderModule.cpp

Lines changed: 101 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -292,33 +292,32 @@ bool GLSLShaderModule::applyShaderMaterial(Renderer *renderer, Material *materia
292292
ambientVal[0] = renderer->ambientColor.r;
293293
ambientVal[1] = renderer->ambientColor.g;
294294
ambientVal[2] = renderer->ambientColor.b;
295-
ambientVal[3] = 1;
296-
297-
GLfloat data4[] = {light.color.x * light.intensity, light.color.y * light.intensity, light.color.z * light.intensity, 1.0};
298-
glLightfv (GL_LIGHT0+lightIndex, GL_DIFFUSE, data4);
299-
300-
data4[0] = light.specularColor.r* light.intensity;
301-
data4[1] = light.specularColor.g* light.intensity;
302-
data4[2] = light.specularColor.b* light.intensity;
303-
data4[3] = light.specularColor.a* light.intensity;
304-
glLightfv (GL_LIGHT0+lightIndex, GL_SPECULAR, data4);
305-
306-
data4[3] = 1.0;
307-
308-
glLightfv (GL_LIGHT0+lightIndex, GL_AMBIENT, ambientVal);
309-
glLightf (GL_LIGHT0+lightIndex, GL_SPOT_CUTOFF, 180);
310-
311-
data4[0] = light.position.x;
312-
data4[1] = light.position.y;
313-
data4[2] = light.position.z;
314-
glLightfv (GL_LIGHT0+lightIndex, GL_POSITION, data4);
315-
316-
glLightf (GL_LIGHT0+lightIndex, GL_CONSTANT_ATTENUATION, light.constantAttenuation);
317-
glLightf (GL_LIGHT0+lightIndex, GL_LINEAR_ATTENUATION, light.linearAttenuation);
318-
glLightf (GL_LIGHT0+lightIndex, GL_QUADRATIC_ATTENUATION, light.quadraticAttenuation);
319-
320-
}
321-
lightIndex++;
295+
ambientVal[3] = 1;
296+
297+
GLfloat data4[] = {light.color.x * light.intensity, light.color.y * light.intensity, light.color.z * light.intensity, 1.0};
298+
glLightfv (GL_LIGHT0+lightIndex, GL_DIFFUSE, data4);
299+
300+
data4[0] = light.specularColor.r* light.intensity;
301+
data4[1] = light.specularColor.g* light.intensity;
302+
data4[2] = light.specularColor.b* light.intensity;
303+
data4[3] = light.specularColor.a* light.intensity;
304+
glLightfv (GL_LIGHT0+lightIndex, GL_SPECULAR, data4);
305+
306+
data4[3] = 1.0;
307+
308+
glLightfv (GL_LIGHT0+lightIndex, GL_AMBIENT, ambientVal);
309+
glLightf (GL_LIGHT0+lightIndex, GL_SPOT_CUTOFF, 180);
310+
311+
data4[0] = light.position.x;
312+
data4[1] = light.position.y;
313+
data4[2] = light.position.z;
314+
glLightfv (GL_LIGHT0+lightIndex, GL_POSITION, data4);
315+
316+
glLightf (GL_LIGHT0+lightIndex, GL_CONSTANT_ATTENUATION, light.constantAttenuation);
317+
glLightf (GL_LIGHT0+lightIndex, GL_LINEAR_ATTENUATION, light.linearAttenuation);
318+
glLightf (GL_LIGHT0+lightIndex, GL_QUADRATIC_ATTENUATION, light.quadraticAttenuation);
319+
lightIndex++;
320+
}
322321
}
323322

324323
vector<LightInfo> spotLights = renderer->getSpotLights();
@@ -346,82 +345,82 @@ bool GLSLShaderModule::applyShaderMaterial(Renderer *renderer, Material *materia
346345
ambientVal[2] = renderer->ambientColor.b;
347346
ambientVal[3] = 1;
348347

349-
GLfloat data4[] = {light.color.x * light.intensity, light.color.y * light.intensity, light.color.z * light.intensity, 1.0};
350-
glLightfv (GL_LIGHT0+lightIndex, GL_DIFFUSE, data4);
351-
352-
data4[0] = light.specularColor.r* light.intensity;
353-
data4[1] = light.specularColor.g* light.intensity;
354-
data4[2] = light.specularColor.b* light.intensity;
355-
data4[3] = light.specularColor.a* light.intensity;
356-
glLightfv (GL_LIGHT0+lightIndex, GL_SPECULAR, data4);
357-
358-
data4[3] = 1.0;
359-
360-
glLightfv (GL_LIGHT0+lightIndex, GL_AMBIENT, ambientVal);
361-
glLightf (GL_LIGHT0+lightIndex, GL_SPOT_CUTOFF, light.spotlightCutoff);
362-
363-
glLightf (GL_LIGHT0+lightIndex, GL_SPOT_EXPONENT, light.spotlightExponent);
364-
365-
data4[0] = dir.x;
366-
data4[1] = dir.y;
367-
data4[2] = dir.z;
368-
glLightfv (GL_LIGHT0+lightIndex, GL_SPOT_DIRECTION, data4);
369-
370-
data4[0] = pos.x;
371-
data4[1] = pos.y;
372-
data4[2] = pos.z;
373-
glLightfv (GL_LIGHT0+lightIndex, GL_POSITION, data4);
374-
375-
glLightf (GL_LIGHT0+lightIndex, GL_CONSTANT_ATTENUATION, light.constantAttenuation);
376-
glLightf (GL_LIGHT0+lightIndex, GL_LINEAR_ATTENUATION, light.linearAttenuation);
377-
glLightf (GL_LIGHT0+lightIndex, GL_QUADRATIC_ATTENUATION, light.quadraticAttenuation);
378-
379-
if(light.shadowsEnabled) {
380-
if(shadowMapTextureIndex < 4) {
381-
switch(shadowMapTextureIndex) {
382-
case 0:
383-
strcpy(texName, "shadowMap0");
384-
strcpy(matName, "shadowMatrix0");
385-
break;
386-
case 1:
387-
strcpy(texName, "shadowMap1");
388-
strcpy(matName, "shadowMatrix1");
389-
break;
390-
case 2:
391-
strcpy(texName, "shadowMap2");
392-
strcpy(matName, "shadowMatrix2");
393-
break;
394-
case 3:
395-
strcpy(texName, "shadowMap3");
396-
strcpy(matName, "shadowMatrix3");
397-
break;
398-
}
399-
400-
int texture_location = glGetUniformLocation(glslShader->shader_id, texName);
401-
glUniform1i(texture_location, textureIndex);
402-
glActiveTexture(GL_TEXTURE0 + textureIndex);
403-
glBindTexture(GL_TEXTURE_2D, ((OpenGLTexture*)light.shadowMapTexture)->getTextureID());
404-
textureIndex++;
405-
406-
int mloc = glGetUniformLocation(glslShader->shader_id, matName);
407-
light.textureMatrix = light.textureMatrix;
408-
409-
410-
GLfloat mat[16];
411-
for(int z=0; z < 16; z++) {
412-
mat[z] = light.textureMatrix.ml[z];
413-
}
414-
glUniformMatrix4fv(mloc, 1, false, mat);
415-
416-
417-
}
418-
shadowMapTextureIndex++;
348+
GLfloat data4[] = {light.color.x * light.intensity, light.color.y * light.intensity, light.color.z * light.intensity, 1.0};
349+
glLightfv (GL_LIGHT0+lightIndex, GL_DIFFUSE, data4);
350+
351+
data4[0] = light.specularColor.r* light.intensity;
352+
data4[1] = light.specularColor.g* light.intensity;
353+
data4[2] = light.specularColor.b* light.intensity;
354+
data4[3] = light.specularColor.a* light.intensity;
355+
glLightfv (GL_LIGHT0+lightIndex, GL_SPECULAR, data4);
356+
357+
data4[3] = 1.0;
358+
359+
glLightfv (GL_LIGHT0+lightIndex, GL_AMBIENT, ambientVal);
360+
glLightf (GL_LIGHT0+lightIndex, GL_SPOT_CUTOFF, light.spotlightCutoff);
361+
362+
glLightf (GL_LIGHT0+lightIndex, GL_SPOT_EXPONENT, light.spotlightExponent);
363+
364+
data4[0] = dir.x;
365+
data4[1] = dir.y;
366+
data4[2] = dir.z;
367+
glLightfv (GL_LIGHT0+lightIndex, GL_SPOT_DIRECTION, data4);
368+
369+
data4[0] = pos.x;
370+
data4[1] = pos.y;
371+
data4[2] = pos.z;
372+
glLightfv (GL_LIGHT0+lightIndex, GL_POSITION, data4);
373+
374+
glLightf (GL_LIGHT0+lightIndex, GL_CONSTANT_ATTENUATION, light.constantAttenuation);
375+
glLightf (GL_LIGHT0+lightIndex, GL_LINEAR_ATTENUATION, light.linearAttenuation);
376+
glLightf (GL_LIGHT0+lightIndex, GL_QUADRATIC_ATTENUATION, light.quadraticAttenuation);
377+
378+
if(light.shadowsEnabled) {
379+
if(shadowMapTextureIndex < 4) {
380+
switch(shadowMapTextureIndex) {
381+
case 0:
382+
strcpy(texName, "shadowMap0");
383+
strcpy(matName, "shadowMatrix0");
384+
break;
385+
case 1:
386+
strcpy(texName, "shadowMap1");
387+
strcpy(matName, "shadowMatrix1");
388+
break;
389+
case 2:
390+
strcpy(texName, "shadowMap2");
391+
strcpy(matName, "shadowMatrix2");
392+
break;
393+
case 3:
394+
strcpy(texName, "shadowMap3");
395+
strcpy(matName, "shadowMatrix3");
396+
break;
397+
}
398+
399+
int texture_location = glGetUniformLocation(glslShader->shader_id, texName);
400+
glUniform1i(texture_location, textureIndex);
401+
glActiveTexture(GL_TEXTURE0 + textureIndex);
402+
glBindTexture(GL_TEXTURE_2D, ((OpenGLTexture*)light.shadowMapTexture)->getTextureID());
403+
textureIndex++;
404+
405+
int mloc = glGetUniformLocation(glslShader->shader_id, matName);
406+
light.textureMatrix = light.textureMatrix;
407+
408+
409+
GLfloat mat[16];
410+
for(int z=0; z < 16; z++) {
411+
mat[z] = light.textureMatrix.ml[z];
412+
}
413+
glUniformMatrix4fv(mloc, 1, false, mat);
414+
415+
416+
}
417+
shadowMapTextureIndex++;
418+
} else {
419+
light.shadowsEnabled = false;
420+
}
421+
422+
lightIndex++;
419423
}
420-
else {
421-
light.shadowsEnabled = false;
422-
}
423-
}
424-
lightIndex++;
425424
}
426425
glPopMatrix();
427426

0 commit comments

Comments
 (0)