diff options
Diffstat (limited to 'indra/newview/app_settings/shaders/class2/deferred')
3 files changed, 45 insertions, 30 deletions
| diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl index d227346163..dfb36980b0 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl @@ -35,19 +35,24 @@ float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, floa  	//get distance  	float d = length(lv); -	//normalize light vector -	lv *= 1.0/d; +	float da = 0.0; + +	if (d > 0.0 && la > 0.0 && fa > 0.0) +	{ +		//normalize light vector +		lv *= 1.0/d; -	//distance attenuation -	float dist2 = d*d/(la*la); -	float da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); +		//distance attenuation +		float dist2 = d*d/(la*la); +		da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); -	// spotlight coefficient. -	float spot = max(dot(-ln, lv), is_pointlight); -	da *= spot*spot; // GL_SPOT_EXPONENT=2 +		// spotlight coefficient. +		float spot = max(dot(-ln, lv), is_pointlight); +		da *= spot*spot; // GL_SPOT_EXPONENT=2 -	//angular attenuation -	da *= calcDirectionalLight(n, lv); +		//angular attenuation +		da *= calcDirectionalLight(n, lv); +	}  	return da;	  } diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl index 86f014df35..f6160815eb 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl @@ -35,19 +35,24 @@ float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, floa  	//get distance  	float d = length(lv); -	//normalize light vector -	lv *= 1.0/d; +	float da = 0.0; + +	if (d > 0.0 && la > 0.0 && fa > 0.0) +	{ +		//normalize light vector +		lv *= 1.0/d; -	//distance attenuation -	float dist2 = d*d/(la*la); -	float da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); +		//distance attenuation +		float dist2 = d*d/(la*la); +		da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); -	// spotlight coefficient. -	float spot = max(dot(-ln, lv), is_pointlight); -	da *= spot*spot; // GL_SPOT_EXPONENT=2 +		// spotlight coefficient. +		float spot = max(dot(-ln, lv), is_pointlight); +		da *= spot*spot; // GL_SPOT_EXPONENT=2 -	//angular attenuation -	da *= calcDirectionalLight(n, lv); +		//angular attenuation +		da *= calcDirectionalLight(n, lv); +	}  	return da;	  } diff --git a/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl b/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl index 495e86c8db..0ae09df0c6 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl @@ -37,19 +37,24 @@ float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, floa  	//get distance  	float d = length(lv); -	//normalize light vector -	lv *= 1.0/d; +	float da = 0.0; + +	if (d > 0.0 && la > 0.0 && fa > 0.0) +	{ +		//normalize light vector +		lv *= 1.0/d; -	//distance attenuation -	float dist2 = d*d/(la*la); -	float da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); +		//distance attenuation +		float dist2 = d*d/(la*la); +		da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); -	// spotlight coefficient. -	float spot = max(dot(-ln, lv), is_pointlight); -	da *= spot*spot; // GL_SPOT_EXPONENT=2 +		// spotlight coefficient. +		float spot = max(dot(-ln, lv), is_pointlight); +		da *= spot*spot; // GL_SPOT_EXPONENT=2 -	//angular attenuation -	da *= calcDirectionalLight(n, lv); +		//angular attenuation +		da *= calcDirectionalLight(n, lv); +	}  	return da;	  } | 
