|
@@ -49,8 +49,18 @@
|
|
|
vec3 lVector = pointLight.position - geometry.position;
|
|
|
directLight.direction = normalize( lVector );
|
|
|
|
|
|
- directLight.color = pointLight.color;
|
|
|
- directLight.color *= calcLightAttenuation( length( lVector ), pointLight.distance, pointLight.decay );
|
|
|
+ float lightDistance = length( lVector );
|
|
|
+
|
|
|
+ if ( testLightInRange( lightDistance, pointLight.distance ) ) {
|
|
|
+
|
|
|
+ directLight.color = pointLight.color;
|
|
|
+ directLight.color *= calcLightAttenuation( lightDistance, pointLight.distance, pointLight.decay );
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ directLight.color = vec3( 0.0 );
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
return directLight;
|
|
|
|
|
@@ -85,15 +95,16 @@
|
|
|
vec3 lVector = spotLight.position - geometry.position;
|
|
|
directLight.direction = normalize( lVector );
|
|
|
|
|
|
+ float lightDistance = length( lVector );
|
|
|
float spotEffect = dot( directLight.direction, spotLight.direction );
|
|
|
|
|
|
- if ( spotEffect > spotLight.angleCos ) {
|
|
|
+ if ( all( bvec2( spotEffect > spotLight.angleCos, testLightInRange( lightDistance, spotLight.distance ) ) ) ) {
|
|
|
|
|
|
float spotEffect = dot( spotLight.direction, directLight.direction );
|
|
|
spotEffect *= clamp( ( spotEffect - spotLight.angleCos ) / spotLight.penumbra, 0.0, 1.0 );
|
|
|
|
|
|
directLight.color = spotLight.color;
|
|
|
- directLight.color *= ( spotEffect * calcLightAttenuation( length( lVector ), spotLight.distance, spotLight.decay ) );
|
|
|
+ directLight.color *= ( spotEffect * calcLightAttenuation( lightDistance, spotLight.distance, spotLight.decay ) );
|
|
|
|
|
|
} else {
|
|
|
|