diff options
Diffstat (limited to 'indra/newview/app_settings/shaders/class1/deferred')
16 files changed, 39 insertions, 266 deletions
| diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl index 3ec2ea12da..a325faaad7 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl @@ -89,9 +89,7 @@ vec2 encode_normal (vec3 n);  vec3 decode_normal (vec2 enc);  vec3 scaleSoftClipFrag(vec3 l); -vec3 atmosFragAmbient(vec3 light, vec3 sunlit);  vec3 atmosFragLighting(vec3 light, vec3 additive, vec3 atten); -vec3 atmosFragAffectDirectionalLight(float light, vec3 sunlit);  void calcFragAtmospherics(vec3 inPositionEye, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 atten, out vec3 additive);  vec3 calcPointLightOrSpotLight(vec3 light_col, vec3 diffuse, vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight) @@ -164,6 +162,8 @@ void main()  	float shadow = 1.0; +    vec3 norm = vary_norm;  +  #if HAS_SHADOW  	vec4 spos = pos; @@ -268,13 +268,10 @@ void main()  	vec4 gamma_diff = diff;	  	diff.rgb = srgb_to_linear(diff.rgb); -	vec3 norm = vary_norm;  - -        vec3 sunlit; -        vec3 amblit; -        vec3 additive; -        vec3 atten; - +    vec3 sunlit; +    vec3 amblit; +    vec3 additive; +    vec3 atten;  	calcFragAtmospherics(pos.xyz, 1.0, sunlit, amblit, additive, atten);  	vec2 abnormal	= encode_normal(norm.xyz); @@ -290,7 +287,7 @@ void main()  	vec4 color = vec4(0,0,0,0); -	color.rgb = atmosFragAmbient(color.rgb, amblit); +	color.rgb = (color.rgb * 0.5) + amblit;  	color.a   = final_alpha;  	float ambient = abs(da); @@ -299,7 +296,7 @@ void main()  	ambient = (1.0-ambient);  	color.rgb *= ambient; -	color.rgb += atmosFragAffectDirectionalLight(final_da, sunlit); +	color.rgb += (final_da * sunlit);  	color.rgb *= gamma_diff.rgb;  	//color.rgb = mix(diff.rgb, color.rgb, final_alpha); diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl index 506118d381..394ae80e53 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl @@ -73,7 +73,7 @@ void main()  	vec3 norm;  	//transform vertex -#ifdef HAS_SKIN +#if defined(HAS_SKIN)  	mat4 trans = getObjectSkinnedTransform();  	trans = modelview_matrix * trans; @@ -83,9 +83,7 @@ void main()  	norm = normalize((trans * vec4(norm, 1.0)).xyz - pos.xyz);  	vec4 frag_pos = projection_matrix * pos;  	gl_Position = frag_pos; -#else - -#ifdef IS_AVATAR_SKIN +#elif defined(IS_AVATAR_SKIN)  	mat4 trans = getSkinnedTransform();  	vec4 pos_in = vec4(position.xyz, 1.0);  	pos.x = dot(trans[0], pos_in); @@ -107,14 +105,11 @@ void main()  	gl_Position = modelview_projection_matrix*vec4(position.xyz, 1.0);  #endif -#endif -  #ifdef USE_INDEXED_TEX  	passTextureIndex();  #endif  	vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy; -	  	vary_norm = norm;  	vary_position = pos.xyz; @@ -122,18 +117,14 @@ void main()  	vertex_color = diffuse_color;  #endif -#ifdef HAS_SKIN +#if defined(HAS_SKIN)  	vary_fragcoord.xyz = frag_pos.xyz + vec3(0,0,near_clip); -#else - -#ifdef IS_AVATAR_SKIN +#elif defined(IS_AVATAR_SKIN)  	vary_fragcoord.xyz = pos.xyz + vec3(0,0,near_clip);  #else  	pos = modelview_projection_matrix * vert;  	vary_fragcoord.xyz = pos.xyz + vec3(0,0,near_clip);  #endif -#endif -  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl index b56abb66d1..7c9382d474 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl @@ -33,7 +33,6 @@ out vec4 frag_color;  #define frag_color gl_FragColor  #endif -uniform sampler2DRect depthMap;  uniform sampler2DRect normalMap;  uniform sampler2DRect lightMap; @@ -45,22 +44,7 @@ uniform float kern_scale;  VARYING vec2 vary_fragcoord; -uniform mat4 inv_proj; -uniform vec2 screen_res; - -vec4 getPosition(vec2 pos_screen) -{ -	float depth = texture2DRect(depthMap, pos_screen.xy).r; -	vec2 sc = pos_screen.xy*2.0; -	sc /= screen_res; -	sc -= vec2(1.0,1.0); -	vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); -	vec4 pos = inv_proj * ndc; -	pos /= pos.w; -	pos.w = 1.0; -	return pos; -} - +vec4 getPosition(vec2 pos_screen);  vec3 decode_normal (vec2 enc);  void main()  @@ -119,11 +103,5 @@ void main()  	col.y *= col.y;  	frag_color = col; - -#ifdef IS_AMD_CARD -	// If it's AMD make sure the GLSL compiler sees the arrays referenced once by static index. Otherwise it seems to optimise the storage awawy which leads to unfun crashes and artifacts. -	vec3 dummy1 = kern[0]; -	vec3 dummy2 = kern[3]; -#endif  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl b/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl index 6ba16b169c..def149d86d 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl @@ -32,11 +32,9 @@ out vec4 frag_data[3];  #endif  uniform float minimum_alpha; - -  uniform sampler2D diffuseMap; -uniform sampler2D normalMap;  uniform sampler2D specularMap; +uniform sampler2D normalMap;  VARYING vec2 vary_texcoord0; diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl index c1c17532b8..1e566b77bf 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl @@ -40,7 +40,6 @@ vec4 applyWaterFogView(vec3 pos, vec4 color);  vec3 srgb_to_linear(vec3 cs);  vec3 linear_to_srgb(vec3 cl); -vec3 atmosFragAmbient(vec3 l, vec3 ambient);  vec3 atmosFragLighting(vec3 l, vec3 additive, vec3 atten);  vec3 scaleSoftClipFrag(vec3 l); @@ -176,19 +175,6 @@ vec3 calcPointLightOrSpotLight(vec3 light_col, vec3 npos, vec3 diffuse, vec4 spe  } -vec4 getPosition_d(vec2 pos_screen, float depth) -{ -	vec2 sc = pos_screen.xy*2.0; -	sc /= screen_res; -	sc -= vec2(1.0,1.0); -	vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); -	vec4 pos = inv_proj * ndc; -	pos /= pos.w; -	pos.w = 1.0; -	return pos; -} - -  #else  #ifdef DEFINE_GL_FRAGCOLOR  out vec4 frag_data[3]; @@ -233,6 +219,8 @@ vec3 decode_normal (vec2 enc);  void main()   { +    vec2 pos_screen = vary_texcoord0.xy; +  	vec4 diffcol = texture2D(diffuseMap, vary_texcoord0.xy);  	diffcol.rgb *= vertex_color.rgb; @@ -390,7 +378,7 @@ void main()  		  final_da = min(final_da, 1.0f);  		  final_da = pow(final_da, 1.0/1.3); -	col.rgb = atmosFragAmbient(col, amblit); +	col.rgb = (col * 0.5) + amblit;  	float ambient = min(abs(da), 1.0);  	ambient *= 0.5; @@ -444,9 +432,6 @@ void main()  		glare += cur_glare;  	} -	//col = mix(atmosLighting(col), fullbrightAtmosTransport(col), diffuse.a); -	//col = mix(scaleSoftClip(col), fullbrightScaleSoftClip(col),  diffuse.a); -  	col = atmosFragLighting(col, additive, atten);  	col = scaleSoftClipFrag(col); diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl index d1ac19270d..eb65c28645 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl @@ -59,18 +59,7 @@ uniform mat4 inv_proj;  vec3 decode_normal (vec2 enc); -vec4 getPosition(vec2 pos_screen) -{ -	float depth = texture2DRect(depthMap, pos_screen.xy).r; -	vec2 sc = pos_screen.xy*2.0; -	sc /= screen_res; -	sc -= vec2(1.0,1.0); -	vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); -	vec4 pos = inv_proj * ndc; -	pos /= pos.w; -	pos.w = 1.0; -	return pos; -} +vec4 getPosition(vec2 pos_screen);  void main()   { @@ -148,12 +137,4 @@ void main()  	frag_color.rgb = out_col;  	frag_color.a = 0.0; - -#ifdef IS_AMD_CARD -	// If it's AMD make sure the GLSL compiler sees the arrays referenced once by static index. Otherwise it seems to optimise the storage awawy which leads to unfun crashes and artifacts. -	vec4 dummy1 = light[0]; -	vec4 dummy2 = light_col[0]; -	vec4 dummy3 = light[LIGHT_COUNT-1]; -	vec4 dummy4 = light_col[LIGHT_COUNT-1]; -#endif  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl index 1d75322b4c..3aa7a3a449 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl @@ -128,19 +128,7 @@ vec4 texture2DLodAmbient(sampler2D projectionMap, vec2 tc, float lod)  	return ret;  } - -vec4 getPosition(vec2 pos_screen) -{ -	float depth = texture2DRect(depthMap, pos_screen.xy).r; -	vec2 sc = pos_screen.xy*2.0; -	sc /= screen_res; -	sc -= vec2(1.0,1.0); -	vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); -	vec4 pos = inv_proj * ndc; -	pos /= pos.w; -	pos.w = 1.0; -	return pos; -} +vec4 getPosition(vec2 pos_screen);  void main()   { diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl index 13b803e03e..df48a66fab 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl @@ -57,19 +57,7 @@ uniform mat4 inv_proj;  uniform vec4 viewport;  vec3 decode_normal (vec2 enc); - -vec4 getPosition(vec2 pos_screen) -{ -	float depth = texture2DRect(depthMap, pos_screen.xy).r; -	vec2 sc = (pos_screen.xy-viewport.xy)*2.0; -	sc /= viewport.zw; -	sc -= vec2(1.0,1.0); -	vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); -	vec4 pos = inv_proj * ndc; -	pos /= pos.w; -	pos.w = 1.0; -	return pos; -} +vec4 getPosition(vec2 pos_screen);  void main()   { diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl index a5625fbc16..3da8531442 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl @@ -1,5 +1,5 @@  /**  - * @file pointLightF.glsl + * @file pointLightV.glsl   *   * $LicenseInfo:firstyear=2007&license=viewerlgpl$   * Second Life Viewer Source Code diff --git a/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl index e33254304b..c2963046c5 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl @@ -49,18 +49,7 @@ VARYING vec2 vary_fragcoord;  uniform mat4 inv_proj;  uniform vec2 screen_res; -vec4 getPosition(vec2 pos_screen) -{ -	float depth = texture2DRect(depthMap, pos_screen.xy).a; -	vec2 sc = pos_screen.xy*2.0; -	sc /= screen_res; -	sc -= vec2(1.0,1.0); -	vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); -	vec4 pos = inv_proj * ndc; -	pos /= pos.w; -	pos.w = 1.0; -	return pos; -} +vec4 getPosition(vec2 pos_screen);  void main()   { @@ -101,10 +90,4 @@ void main()  	col = col*col*blur_quad.x + col*blur_quad.y + blur_quad.z;  	frag_color.rgb = col; - -#ifdef IS_AMD_CARD -	// If it's AMD make sure the GLSL compiler sees the arrays referenced once by static index. Otherwise it seems to optimise the storage awawy which leads to unfun crashes and artifacts. -	vec2 dummy1 = kern[0]; -	vec2 dummy2 = kern[31]; -#endif  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl index 5627275df6..cac3e75f1f 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl @@ -69,33 +69,17 @@ vec3 srgb_to_linear(vec3 cs);  vec3 linear_to_srgb(vec3 cl);  vec3 decode_normal (vec2 enc); +vec3 scaleSoftClipFrag(vec3 l);  vec3 atmosFragLighting(vec3 l, vec3 additive, vec3 atten);  void calcFragAtmospherics(vec3 inPositionEye, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, out vec3 atten); -vec4 getPosition_d(vec2 pos_screen, float depth) -{ -	vec2 sc = pos_screen.xy*2.0; -	sc /= screen_res; -	sc -= vec2(1.0,1.0); -	vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); -	vec4 pos = inv_proj * ndc; -	pos /= pos.w; -	pos.w = 1.0; -	return pos; -} - -vec4 getPosition(vec2 pos_screen) -{ //get position in screen space (world units) given window coordinate and depth map -	float depth = texture2DRect(depthMap, pos_screen.xy).a; -	return getPosition_d(pos_screen, depth); -} - +vec4 getPositionWithDepth(vec2 pos_screen, float depth);  void main()   {  	vec2 tc = vary_fragcoord.xy;  	float depth = texture2DRect(depthMap, tc.xy).r; -	vec3 pos = getPosition_d(tc, depth).xyz; +	vec4 pos = getPositionWithDepth(tc, depth);  	vec4 norm = texture2DRect(normalMap, tc);  	float envIntensity = norm.z;  	norm.xyz = decode_normal(norm.xy); // unpack norm @@ -156,27 +140,25 @@ void main()  		if (envIntensity > 0.0)  		{ //add environmentmap  			vec3 env_vec = env_mat * refnormpersp; -			 -			  			vec3 refcol = textureCube(environmentMap, env_vec).rgb; - -			col = mix(col.rgb, refcol,  -				envIntensity);   +			col = mix(col.rgb, refcol, envIntensity);    		}  		if (norm.w < 0.5)  		{  			col = atmosFragLighting(col, additive, atten); +			col = scaleSoftClipFrag(col);  		}  		#ifdef WATER_FOG -			vec4 fogged = applyWaterFogView(pos,vec4(col, bloom)); +			vec4 fogged = applyWaterFogView(pos.xyz,vec4(col, bloom));  			col = fogged.rgb;  			bloom = fogged.a;  		#endif  		col = srgb_to_linear(col); +		//col = vec3(1,0,1);  		//col.g = envIntensity;  	} diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightV.glsl index b59fcbe017..5655c6f99f 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightV.glsl @@ -30,6 +30,7 @@ ATTRIBUTE vec3 position;  uniform vec2 screen_res;  VARYING vec2 vary_fragcoord; +  void main()  {  	//transform vertex diff --git a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl index 2b6428963d..022bcbabca 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl @@ -132,18 +132,7 @@ vec4 texture2DLodAmbient(sampler2D projectionMap, vec2 tc, float lod)  } -vec4 getPosition(vec2 pos_screen) -{ -	float depth = texture2DRect(depthMap, pos_screen.xy).r; -	vec2 sc = pos_screen.xy*2.0; -	sc /= screen_res; -	sc -= vec2(1.0,1.0); -	vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); -	vec4 pos = inv_proj * ndc; -	pos /= pos.w; -	pos.w = 1.0; -	return pos; -} +vec4 getPosition(vec2 pos_screen);  void main()   { diff --git a/indra/newview/app_settings/shaders/class1/deferred/srgb.glsl b/indra/newview/app_settings/shaders/class1/deferred/srgb.glsl index 00ba0e8fad..bc3324f543 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/srgb.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/srgb.glsl @@ -48,7 +48,6 @@ vec3 srgb_to_linear(vec3 cs)  	bvec3 lte = lessThanEqual(cs,vec3(0.04045));  	return mix(high_range, low_range, lte); -  }  vec3 linear_to_srgb(vec3 cl) @@ -59,6 +58,4 @@ vec3 linear_to_srgb(vec3 cl)  	bvec3 lt = lessThan(cl,vec3(0.0031308));  	return mix(high_range, low_range, lt); -  } - diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl index 403df87853..006a49d9a0 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl @@ -35,102 +35,26 @@ out vec4 frag_color;  //class 1 -- no shadow, SSAO only -uniform sampler2DRect depthMap;  uniform sampler2DRect normalMap; -uniform sampler2D noiseMap; -  // Inputs -uniform float ssao_radius; -uniform float ssao_max_radius; -uniform float ssao_factor; -uniform float ssao_factor_inv; -  VARYING vec2 vary_fragcoord; -uniform mat4 inv_proj; -uniform vec2 screen_res; -  vec3 decode_normal (vec2 enc); - -vec4 getPosition(vec2 pos_screen) -{ -	float depth = texture2DRect(depthMap, pos_screen.xy).r; -	vec2 sc = pos_screen.xy*2.0; -	sc /= screen_res; -	sc -= vec2(1.0,1.0); -	vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0); -	vec4 pos = inv_proj * ndc; -	pos /= pos.w; -	pos.w = 1.0; -	return pos; -} +vec3 getNorm(vec2 pos_screen); +vec4 getPosition(vec2 pos_screen);  //calculate decreases in ambient lighting when crowded out (SSAO) -float calcAmbientOcclusion(vec4 pos, vec3 norm) -{ -	float ret = 1.0; -	 -	vec2 kern[8]; -	// exponentially (^2) distant occlusion samples spread around origin -	kern[0] = vec2(-1.0, 0.0) * 0.125*0.125; -	kern[1] = vec2(1.0, 0.0) * 0.250*0.250; -	kern[2] = vec2(0.0, 1.0) * 0.375*0.375; -	kern[3] = vec2(0.0, -1.0) * 0.500*0.500; -	kern[4] = vec2(0.7071, 0.7071) * 0.625*0.625; -	kern[5] = vec2(-0.7071, -0.7071) * 0.750*0.750; -	kern[6] = vec2(-0.7071, 0.7071) * 0.875*0.875; -	kern[7] = vec2(0.7071, -0.7071) * 1.000*1.000; - -	vec2 pos_screen = vary_fragcoord.xy; -	vec3 pos_world = pos.xyz; -	vec2 noise_reflect = texture2D(noiseMap, vary_fragcoord.xy/128.0).xy; -		 -	float angle_hidden = 0.0; -	int points = 0; -		 -	float scale = min(ssao_radius / -pos_world.z, ssao_max_radius); -		 -	// it was found that keeping # of samples a constant was the fastest, probably due to compiler optimizations unrolling?) -	for (int i = 0; i < 8; i++) -	{ -		vec2 samppos_screen = pos_screen + scale * reflect(kern[i], noise_reflect); -		vec3 samppos_world = getPosition(samppos_screen).xyz;  -			 -		vec3 diff = pos_world - samppos_world; -		float dist2 = dot(diff, diff); -			 -		// assume each sample corresponds to an occluding sphere with constant radius, constant x-sectional area -		// --> solid angle shrinking by the square of distance -		//radius is somewhat arbitrary, can approx with just some constant k * 1 / dist^2 -		//(k should vary inversely with # of samples, but this is taken care of later) -			 -		angle_hidden = angle_hidden + float(dot((samppos_world - 0.05*norm - pos_world), norm) > 0.0) * min(1.0/dist2, ssao_factor_inv); -			 -		// 'blocked' samples (significantly closer to camera relative to pos_world) are "no data", not "no occlusion"  -		points = points + int(diff.z > -1.0); -	} -		 -	angle_hidden = min(ssao_factor*angle_hidden/float(points), 1.0); -		 -	ret = (1.0 - (float(points != 0) * angle_hidden)); -	 -	return min(ret, 1.0); -} +float calcAmbientOcclusion(vec4 pos, vec3 norm, vec2 pos_screen);  void main()   { -	vec2 pos_screen = vary_fragcoord.xy; -	 -	//try doing an unproject here -	 -	vec4 pos = getPosition(pos_screen); -	 -	vec3 norm = texture2DRect(normalMap, pos_screen).xyz; -	norm = decode_normal(norm.xy); -		 +	vec2 pos_screen = vary_fragcoord.xy;	 +	vec4 pos        = getPosition(pos_screen); +	vec3 norm       = getNorm(pos_screen); +  	frag_color[0] = 1.0; -	frag_color[1] = calcAmbientOcclusion(pos, norm); +	frag_color[1] = calcAmbientOcclusion(pos, norm, pos_screen);  	frag_color[2] = 1.0;   	frag_color[3] = 1.0;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl index 73f6d9fec3..69543b93ea 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl @@ -41,15 +41,6 @@ uniform sampler2D bumpMap2;  uniform float blend_factor;  uniform sampler2D screenTex;  uniform sampler2D refTex; -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 float sunAngle;  uniform float sunAngle2;  uniform vec3 lightDir; | 
