diff options
Diffstat (limited to 'indra/newview/app_settings/shaders')
5 files changed, 96 insertions, 194 deletions
| diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaF.glsl deleted file mode 100644 index 7d9d6cc0b2..0000000000 --- a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaF.glsl +++ /dev/null @@ -1,70 +0,0 @@ -/**  - * @file avatarAlphaF.glsl - * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ - * $/LicenseInfo$ - */ - -#version 120 - -uniform sampler2D diffuseMap; -uniform sampler2DShadow shadowMap0; -uniform sampler2DShadow shadowMap1; -uniform sampler2DShadow shadowMap2; -uniform sampler2DShadow shadowMap3; -uniform sampler2D noiseMap; - -uniform mat4 shadow_matrix[6]; -uniform vec4 shadow_clip; - -vec3 atmosLighting(vec3 light); -vec3 scaleSoftClip(vec3 light); - -varying vec3 vary_ambient; -varying vec3 vary_directional; -varying vec4 vary_position; -varying vec3 vary_normal; - -void main()  -{ -	float shadow = 1.0; -	vec4 pos = vary_position; -	vec3 norm = normalize(vary_normal); -	 -	vec3 nz = texture2D(noiseMap, gl_FragCoord.xy/128.0).xyz; - -	if (pos.z > -shadow_clip.w) -	{	 -		 -		if (pos.z < -shadow_clip.z) -		{ -			vec4 lpos = shadow_matrix[3]*pos; -			shadow = shadow2DProj(shadowMap3, lpos).x; -		} -		else if (pos.z < -shadow_clip.y) -		{ -			vec4 lpos = shadow_matrix[2]*pos; -			shadow = shadow2DProj(shadowMap2, lpos).x; -		} -		else if (pos.z < -shadow_clip.x) -		{ -			vec4 lpos = shadow_matrix[1]*pos; -			shadow = shadow2DProj(shadowMap1, lpos).x; -		} -		else -		{ -			vec4 lpos = shadow_matrix[0]*pos; -			shadow = shadow2DProj(shadowMap0, lpos).x; -		} -	} -	 -	 -	vec4 col = vec4(vary_ambient + vary_directional*shadow, gl_Color.a);	 -	vec4 color = texture2D(diffuseMap, gl_TexCoord[0].xy) * col; -	 -	color.rgb = atmosLighting(color.rgb); - -	color.rgb = scaleSoftClip(color.rgb); - -	gl_FragColor = color; -} diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl index 5dfbb91393..a2a7dea20d 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl @@ -22,11 +22,36 @@ vec3 scaleUpLight(vec3 light);  varying vec3 vary_position;  varying vec3 vary_ambient;  varying vec3 vary_directional; -varying vec3 vary_normal;  varying vec3 vary_fragcoord; +varying vec3 vary_pointlight_col;  uniform float near_clip; +float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight) +{ +	//get light vector +	vec3 lv = lp.xyz-v; +	 +	//get distance +	float d = length(lv); +	 +	//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); + +	// spotlight coefficient. +	float spot = max(dot(-ln, lv), is_pointlight); +	da *= spot*spot; // GL_SPOT_EXPONENT=2 + +	//angular attenuation +	da *= calcDirectionalLight(n, lv); + +	return da;	 +} +  void main()  {  	gl_TexCoord[0] = gl_MultiTexCoord0; @@ -49,7 +74,6 @@ void main()  	gl_Position = frag_pos;  	vary_position = pos.xyz; -	vary_normal = norm;	  	calcAtmospherics(pos.xyz); @@ -57,18 +81,20 @@ void main()  	vec4 col = vec4(0.0, 0.0, 0.0, gl_Color.a); -	// Collect normal lights (need to be divided by two, as we later multiply by 2) -	col.rgb += gl_LightSource[2].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[2].position, gl_LightSource[2].spotDirection.xyz, gl_LightSource[2].linearAttenuation, gl_LightSource[2].specular.a); -	col.rgb += gl_LightSource[3].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[3].position, gl_LightSource[3].spotDirection.xyz, gl_LightSource[3].linearAttenuation, gl_LightSource[3].specular.a); -	col.rgb += gl_LightSource[4].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[4].position, gl_LightSource[4].spotDirection.xyz, gl_LightSource[4].linearAttenuation, gl_LightSource[4].specular.a); -	col.rgb += gl_LightSource[5].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[5].position, gl_LightSource[5].spotDirection.xyz, gl_LightSource[5].linearAttenuation, gl_LightSource[5].specular.a); -	col.rgb += gl_LightSource[6].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[6].position, gl_LightSource[6].spotDirection.xyz, gl_LightSource[6].linearAttenuation, gl_LightSource[6].specular.a); -	col.rgb += gl_LightSource[7].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[7].position, gl_LightSource[7].spotDirection.xyz, gl_LightSource[7].linearAttenuation, gl_LightSource[7].specular.a); -	col.rgb += gl_LightSource[1].diffuse.rgb*calcDirectionalLight(norm, gl_LightSource[1].position.xyz); -	col.rgb = scaleDownLight(col.rgb); +	// Collect normal lights +	col.rgb += gl_LightSource[2].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[2].position, gl_LightSource[2].spotDirection.xyz, gl_LightSource[2].linearAttenuation, gl_LightSource[2].quadraticAttenuation, gl_LightSource[2].specular.a); +	col.rgb += gl_LightSource[3].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[3].position, gl_LightSource[3].spotDirection.xyz, gl_LightSource[3].linearAttenuation, gl_LightSource[3].quadraticAttenuation ,gl_LightSource[3].specular.a); +	col.rgb += gl_LightSource[4].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[4].position, gl_LightSource[4].spotDirection.xyz, gl_LightSource[4].linearAttenuation, gl_LightSource[4].quadraticAttenuation, gl_LightSource[4].specular.a); +	col.rgb += gl_LightSource[5].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[5].position, gl_LightSource[5].spotDirection.xyz, gl_LightSource[5].linearAttenuation, gl_LightSource[5].quadraticAttenuation, gl_LightSource[5].specular.a); +	col.rgb += gl_LightSource[6].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[6].position, gl_LightSource[6].spotDirection.xyz, gl_LightSource[6].linearAttenuation, gl_LightSource[6].quadraticAttenuation, gl_LightSource[6].specular.a); +	col.rgb += gl_LightSource[7].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[7].position, gl_LightSource[7].spotDirection.xyz, gl_LightSource[7].linearAttenuation, gl_LightSource[7].quadraticAttenuation, gl_LightSource[7].specular.a); +	vary_pointlight_col = col.rgb*gl_Color.rgb; + +	col.rgb = vec3(0,0,0); +  	// Add windlight lights -	col.rgb += atmosAmbient(vec3(0.)); +	col.rgb = atmosAmbient(vec3(0.));  	vary_ambient = col.rgb*gl_Color.rgb;  	vary_directional = gl_Color.rgb*atmosAffectDirectionalLight(max(calcDirectionalLight(norm, gl_LightSource[0].position.xyz), (1.0-gl_Color.a)*(1.0-gl_Color.a))); diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightV.glsl new file mode 100644 index 0000000000..2e3e84dd15 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightV.glsl @@ -0,0 +1,20 @@ +/**  + * @file multiPointLightV.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $/LicenseInfo$ + */ + +#version 120 + +varying vec4 vary_fragcoord; + +void main() +{ +	//transform vertex +	vec4 pos = gl_ModelViewProjectionMatrix * gl_Vertex; +	vary_fragcoord = pos; + +	gl_Position = pos; +	gl_FrontColor = gl_Color; +} diff --git a/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaF.glsl b/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaF.glsl deleted file mode 100644 index 4671a54078..0000000000 --- a/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaF.glsl +++ /dev/null @@ -1,100 +0,0 @@ -/**  - * @file avatarAlphaF.glsl - * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ - * $/LicenseInfo$ - */ -  -#version 120 - -#extension GL_ARB_texture_rectangle : enable - -uniform sampler2D diffuseMap; -uniform sampler2DRectShadow shadowMap0; -uniform sampler2DRectShadow shadowMap1; -uniform sampler2DRectShadow shadowMap2; -uniform sampler2DRectShadow shadowMap3; -uniform sampler2D noiseMap; - -uniform mat4 shadow_matrix[6]; -uniform vec4 shadow_clip; -uniform vec2 screen_res; -uniform vec2 shadow_res; - -vec3 atmosLighting(vec3 light); -vec3 scaleSoftClip(vec3 light); - -varying vec3 vary_ambient; -varying vec3 vary_directional; -varying vec3 vary_position; -varying vec3 vary_normal; - -uniform float shadow_bias; - -float pcfShadow(sampler2DRectShadow shadowMap, vec4 stc, float scl) -{ -	stc.xyz /= stc.w; -	stc.z += shadow_bias; -	 -	float cs = shadow2DRect(shadowMap, stc.xyz).x; -	float shadow = cs; - -	shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(scl, scl, 0.0)).x, cs); -	shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(scl, -scl, 0.0)).x, cs); -	shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(-scl, scl, 0.0)).x, cs); -	shadow += max(shadow2DRect(shadowMap, stc.xyz+vec3(-scl, -scl, 0.0)).x, cs); -			 -	return shadow/5.0; -} - -void main()  -{ -	float shadow = 1.0; -	vec4 pos = vec4(vary_position, 1.0); -	vec3 norm = normalize(vary_normal); -	 -	//vec3 nz = texture2D(noiseMap, gl_FragCoord.xy/128.0).xyz; - -	vec4 spos = pos; -	 -	if (spos.z > -shadow_clip.w) -	{	 -		vec4 lpos; -		 -		if (spos.z < -shadow_clip.z) -		{ -			lpos = shadow_matrix[3]*spos; -			lpos.xy *= shadow_res; -			shadow = pcfShadow(shadowMap3, lpos, 1.5); -			shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0); -		} -		else if (spos.z < -shadow_clip.y) -		{ -			lpos = shadow_matrix[2]*spos; -			lpos.xy *= shadow_res; -			shadow = pcfShadow(shadowMap2, lpos, 1.5); -		} -		else if (spos.z < -shadow_clip.x) -		{ -			lpos = shadow_matrix[1]*spos; -			lpos.xy *= shadow_res; -			shadow = pcfShadow(shadowMap1, lpos, 1.5); -		} -		else -		{ -			lpos = shadow_matrix[0]*spos; -			lpos.xy *= shadow_res; -			shadow = pcfShadow(shadowMap0, lpos, 1.5); -		} -	} -	 -	 -	vec4 col = vec4(vary_ambient + vary_directional*shadow, gl_Color.a);	 -	vec4 color = texture2D(diffuseMap, gl_TexCoord[0].xy) * col; -	 -	color.rgb = atmosLighting(color.rgb); - -	color.rgb = scaleSoftClip(color.rgb); - -	gl_FragColor = color; -} diff --git a/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl b/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl index 30954a8677..495e86c8db 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl @@ -22,13 +22,38 @@ vec3 scaleUpLight(vec3 light);  varying vec3 vary_position;  varying vec3 vary_ambient;  varying vec3 vary_directional; -varying vec3 vary_normal;  varying vec3 vary_fragcoord; +varying vec3 vary_pointlight_col;  uniform float near_clip;  uniform float shadow_offset;  uniform float shadow_bias; +float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight) +{ +	//get light vector +	vec3 lv = lp.xyz-v; +	 +	//get distance +	float d = length(lv); +	 +	//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); + +	// spotlight coefficient. +	float spot = max(dot(-ln, lv), is_pointlight); +	da *= spot*spot; // GL_SPOT_EXPONENT=2 + +	//angular attenuation +	da *= calcDirectionalLight(n, lv); + +	return da;	 +} +  void main()  {  	gl_TexCoord[0] = gl_MultiTexCoord0; @@ -51,7 +76,6 @@ void main()  	float dp_directional_light = max(0.0, dot(norm, gl_LightSource[0].position.xyz));  	vary_position = pos.xyz + gl_LightSource[0].position.xyz * (1.0-dp_directional_light)*shadow_offset; -	vary_normal = norm;	  	calcAtmospherics(pos.xyz); @@ -59,18 +83,20 @@ void main()  	vec4 col = vec4(0.0, 0.0, 0.0, gl_Color.a); -	// Collect normal lights (need to be divided by two, as we later multiply by 2) -	col.rgb += gl_LightSource[2].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[2].position, gl_LightSource[2].spotDirection.xyz, gl_LightSource[2].linearAttenuation, gl_LightSource[2].specular.a); -	col.rgb += gl_LightSource[3].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[3].position, gl_LightSource[3].spotDirection.xyz, gl_LightSource[3].linearAttenuation, gl_LightSource[3].specular.a); -	col.rgb += gl_LightSource[4].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[4].position, gl_LightSource[4].spotDirection.xyz, gl_LightSource[4].linearAttenuation, gl_LightSource[4].specular.a); -	col.rgb += gl_LightSource[5].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[5].position, gl_LightSource[5].spotDirection.xyz, gl_LightSource[5].linearAttenuation, gl_LightSource[5].specular.a); -	col.rgb += gl_LightSource[6].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[6].position, gl_LightSource[6].spotDirection.xyz, gl_LightSource[6].linearAttenuation, gl_LightSource[6].specular.a); -	col.rgb += gl_LightSource[7].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[7].position, gl_LightSource[7].spotDirection.xyz, gl_LightSource[7].linearAttenuation, gl_LightSource[7].specular.a); -	col.rgb += gl_LightSource[1].diffuse.rgb*calcDirectionalLight(norm, gl_LightSource[1].position.xyz); -	col.rgb = scaleDownLight(col.rgb); +	// Collect normal lights +	col.rgb += gl_LightSource[2].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[2].position, gl_LightSource[2].spotDirection.xyz, gl_LightSource[2].linearAttenuation, gl_LightSource[2].quadraticAttenuation, gl_LightSource[2].specular.a); +	col.rgb += gl_LightSource[3].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[3].position, gl_LightSource[3].spotDirection.xyz, gl_LightSource[3].linearAttenuation, gl_LightSource[3].quadraticAttenuation ,gl_LightSource[3].specular.a); +	col.rgb += gl_LightSource[4].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[4].position, gl_LightSource[4].spotDirection.xyz, gl_LightSource[4].linearAttenuation, gl_LightSource[4].quadraticAttenuation, gl_LightSource[4].specular.a); +	col.rgb += gl_LightSource[5].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[5].position, gl_LightSource[5].spotDirection.xyz, gl_LightSource[5].linearAttenuation, gl_LightSource[5].quadraticAttenuation, gl_LightSource[5].specular.a); +	col.rgb += gl_LightSource[6].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[6].position, gl_LightSource[6].spotDirection.xyz, gl_LightSource[6].linearAttenuation, gl_LightSource[6].quadraticAttenuation, gl_LightSource[6].specular.a); +	col.rgb += gl_LightSource[7].diffuse.rgb*calcPointLightOrSpotLight(pos.xyz, norm, gl_LightSource[7].position, gl_LightSource[7].spotDirection.xyz, gl_LightSource[7].linearAttenuation, gl_LightSource[7].quadraticAttenuation, gl_LightSource[7].specular.a); +	vary_pointlight_col = col.rgb*gl_Color.rgb; + +	col.rgb = vec3(0,0,0); +  	// Add windlight lights -	col.rgb += atmosAmbient(vec3(0.)); +	col.rgb = atmosAmbient(vec3(0.));  	vary_ambient = col.rgb*gl_Color.rgb;  	vary_directional = gl_Color.rgb*atmosAffectDirectionalLight(max(calcDirectionalLight(norm, gl_LightSource[0].position.xyz), (1.0-gl_Color.a)*(1.0-gl_Color.a))); | 
