@@ -375,6 +375,8 @@ bool GLSLShaderModule::applyShaderMaterial(Renderer *renderer, Material *materia
375375 glLightf (GL_LIGHT0+lightIndex, GL_LINEAR_ATTENUATION, light.linearAttenuation );
376376 glLightf (GL_LIGHT0+lightIndex, GL_QUADRATIC_ATTENUATION, light.quadraticAttenuation );
377377
378+ Number shadowAmount = 0.0 ;
379+
378380 if (light.shadowsEnabled ) {
379381 if (shadowMapTextureIndex < 4 ) {
380382 switch (shadowMapTextureIndex) {
@@ -401,22 +403,22 @@ bool GLSLShaderModule::applyShaderMaterial(Renderer *renderer, Material *materia
401403 glActiveTexture (GL_TEXTURE0 + textureIndex);
402404 glBindTexture (GL_TEXTURE_2D, ((OpenGLTexture*)light.shadowMapTexture )->getTextureID ());
403405 textureIndex++;
406+
407+ LocalShaderParam *matParam = material->getShaderBinding (shaderIndex)->getLocalParamByName (matName);
408+ if (matParam) {
409+ matParam->setMatrix4 (light.textureMatrix );
410+ }
404411
405- int mloc = glGetUniformLocation (glslShader->shader_id , matName);
406- light.textureMatrix = light.textureMatrix ;
412+ shadowAmount = 1.0 ;
407413
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-
416414 }
415+
417416 shadowMapTextureIndex++;
418- } else {
419- light.shadowsEnabled = false ;
417+ }
418+
419+ LocalShaderParam *amountParam = material->getShaderBinding (shaderIndex)->getLocalParamByName (" shadowAmount" );
420+ if (amountParam) {
421+ amountParam->setNumber (shadowAmount);
420422 }
421423
422424 lightIndex++;
@@ -427,13 +429,12 @@ bool GLSLShaderModule::applyShaderMaterial(Renderer *renderer, Material *materia
427429 glEnable (GL_TEXTURE_2D);
428430
429431 Matrix4 modelMatrix = renderer->getModelviewMatrix () * renderer->getCameraMatrix ();
430- int mloc = glGetUniformLocation (glslShader->shader_id , " modelMatrix" );
431- GLfloat mat[16 ];
432- for (int z=0 ; z < 16 ; z++) {
433- mat[z] = modelMatrix.ml [z];
434- }
435- glUniformMatrix4fv (mloc, 1 , false , mat);
436-
432+ LocalShaderParam *modelMatrixParam = material->getShaderBinding (shaderIndex)->getLocalParamByName (" modelMatrix" );
433+
434+ if (modelMatrixParam) {
435+ modelMatrixParam->setMatrix4 (modelMatrix);
436+ }
437+
437438 ShaderBinding *cgBinding = material->getShaderBinding (shaderIndex);
438439
439440 for (int i=0 ; i < glslShader->expectedParams .size (); i++) {
0 commit comments