diff options
Diffstat (limited to 'drivers/gles2/shaders')
-rw-r--r-- | drivers/gles2/shaders/SCsub | 4 | ||||
-rw-r--r-- | drivers/gles2/shaders/material.glsl | 12 |
2 files changed, 16 insertions, 0 deletions
diff --git a/drivers/gles2/shaders/SCsub b/drivers/gles2/shaders/SCsub index 38177d725f..1de5604321 100644 --- a/drivers/gles2/shaders/SCsub +++ b/drivers/gles2/shaders/SCsub @@ -1,3 +1,5 @@ +#!/usr/bin/env python + Import('env') if env['BUILDERS'].has_key('GLSL120GLES'): @@ -6,3 +8,5 @@ if env['BUILDERS'].has_key('GLSL120GLES'): env.GLSL120GLES('canvas_shadow.glsl'); env.GLSL120GLES('blur.glsl'); env.GLSL120GLES('copy.glsl'); + +Export('env') diff --git a/drivers/gles2/shaders/material.glsl b/drivers/gles2/shaders/material.glsl index 477a451f2f..e5be25757d 100644 --- a/drivers/gles2/shaders/material.glsl +++ b/drivers/gles2/shaders/material.glsl @@ -980,6 +980,12 @@ FRAGMENT_SHADER_CODE #ifdef LIGHT_USE_SHADOW #ifdef LIGHT_TYPE_DIRECTIONAL + float shadow_fade_exponent=5.0; //hardcoded for now + float shadow_fade=pow(length(vertex_interp)/light_attenuation.g,shadow_fade_exponent); + +// optimization - skip shadows outside visible range + if(shadow_fade<1.0){ + #ifdef LIGHT_USE_PSSM @@ -1105,6 +1111,12 @@ FRAGMENT_SHADER_CODE shadow_attenuation=SAMPLE_SHADOW_TEX(shadow_coord.xy,shadow_coord.z); #endif + + shadow_attenuation=mix(shadow_attenuation,1.0,shadow_fade); + }else{ + shadow_attenuation=1.0; + }; + #endif #ifdef LIGHT_TYPE_OMNI |