diff options
| author | Leslie Linden <leslie@lindenlab.com> | 2011-05-10 14:34:36 -0700 | 
|---|---|---|
| committer | Leslie Linden <leslie@lindenlab.com> | 2011-05-10 14:34:36 -0700 | 
| commit | a52019d6d1e15d0e826d279ebcaef2f99d293292 (patch) | |
| tree | 2c42c520929293ed69c4df7fcbdf9dfe08e50f94 /indra/newview/app_settings/shaders/class2 | |
| parent | 5f6559c0f662ae21306524a28d9c8ec0aa199163 (diff) | |
SH-1521 FIX -- Lighting and Shadows grayed out on mac
* Modified mac feature table to bring it up to date with latest renderer features including deferred rendering
* Changed mac AGL pixel format to no longer allow it to revert to software rendering when shader compilation errors occur.
* Fixed up various GLSL shader compilation warnings and errors that came up as a result of the above changes.
* Changed initial conditions for the "hardware skinning" checkbox on the preferences floater so it can be modified before login on machines that support avatar vertex programs.
* Removed unused avatarAlphaF.glsl files
Reviewed by davep
Diffstat (limited to 'indra/newview/app_settings/shaders/class2')
| -rw-r--r-- | indra/newview/app_settings/shaders/class2/deferred/avatarAlphaF.glsl | 100 | ||||
| -rw-r--r-- | indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl | 50 | 
2 files changed, 38 insertions, 112 deletions
| 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))); | 
