diff options
| author | Dave Parks <davep@lindenlab.com> | 2013-06-19 11:31:44 -0500 | 
|---|---|---|
| committer | Dave Parks <davep@lindenlab.com> | 2013-06-19 11:31:44 -0500 | 
| commit | 6c061ae4fd3c5de9a73035855180df2b26dae3dd (patch) | |
| tree | 4d46d86d34e4abd2f3f57481fda67dcec335ba66 /indra/newview/app_settings/shaders/class1 | |
| parent | 2655c7a17ae38a073dcf8f05b0127b68edc34c95 (diff) | |
| parent | b49594662573959e0d7ccc08a2b266b3abc8130e (diff) | |
Automated merge with https://bitbucket.org/lindenlab/viewer-development-materials
Diffstat (limited to 'indra/newview/app_settings/shaders/class1')
14 files changed, 288 insertions, 88 deletions
| diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl index 77a53a71aa..0899caa2af 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl @@ -78,6 +78,7 @@ uniform vec2 screen_res;  vec3 calcDirectionalLight(vec3 n, vec3 l)  {  	float a = max(dot(n,l),0.0); +	a = pow(a, 1.0/1.3);  	return vec3(a,a,a);  } @@ -87,7 +88,7 @@ vec3 calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float  	vec3 lv = lp.xyz-v;  	//get distance -	float d = dot(lv,lv); +	float d = length(lv);  	float da = 0.0; @@ -97,9 +98,11 @@ vec3 calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float  		lv = normalize(lv);  		//distance attenuation -		float dist2 = d/la; -		da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); -		da = pow(da, 2.2) * 2.2; +		float dist = d/la; +		da = clamp(1.0-(dist-1.0*(1.0-fa))/fa, 0.0, 1.0); +		da *= da; +		da *= 1.4; +	  		// spotlight coefficient.  		float spot = max(dot(-ln, lv), is_pointlight); @@ -212,6 +215,7 @@ void main()  #else  	vec4 diff = texture2D(diffuseMap,vary_texcoord0.xy);  #endif +	vec4 gamma_diff = diff;  	diff.rgb = pow(diff.rgb, vec3(2.2f, 2.2f, 2.2f)); @@ -224,7 +228,7 @@ void main()  	vec3 normal = vary_norm;   	vec3 l = light_position[0].xyz; -	vec3 dlight = calcDirectionalLight(normal, l) * 2.6; +	vec3 dlight = calcDirectionalLight(normal, l);  	dlight = dlight * vary_directional.rgb * vary_pointlight_col;  #if HAS_SHADOW @@ -233,13 +237,16 @@ void main()  	vec4 col = vec4(vary_ambient + dlight, vertex_color_alpha);  #endif -	vec4 color = diff * col; +	vec4 color = gamma_diff * col;  	color.rgb = atmosLighting(color.rgb);  	color.rgb = scaleSoftClip(color.rgb); + +	color.rgb = pow(color.rgb, vec3(2.2));  	col = vec4(0,0,0,0); +	     #define LIGHT_LOOP(i) col.rgb += light_diffuse[i].rgb * calcPointLightOrSpotLight(pos.xyz, normal, light_position[i], light_direction[i].xyz, light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z);  	LIGHT_LOOP(1) @@ -250,7 +257,7 @@ void main()  	LIGHT_LOOP(6)  	LIGHT_LOOP(7) -	color.rgb += diff.rgb * vary_pointlight_col * col.rgb; +	color.rgb += diff.rgb * pow(vary_pointlight_col, vec3(2.2)) * col.rgb;  	color.rgb = pow(color.rgb, vec3(1.0/2.2)); diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl index 247ee0a34f..9d3ba564cd 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl @@ -58,8 +58,6 @@ mat4 getSkinnedTransform();  vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);  void calcAtmospherics(vec3 inPositionEye); -vec3 calcDirectionalLight(vec3 n, vec3 l); -  vec3 atmosAmbient(vec3 light);  vec3 atmosAffectDirectionalLight(float lightIntensity);  vec3 scaleDownLight(vec3 light); @@ -88,12 +86,6 @@ uniform vec3 light_diffuse[8];  uniform vec3 sun_dir; -vec3 calcDirectionalLight(vec3 n, vec3 l) -{ -        float a = max(dot(n,l),0.0); -        return vec3(a,a,a); -} -  vec3 calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)  {  	//get light vector @@ -184,7 +176,7 @@ void main()  	//vec4 color = calcLighting(pos.xyz, norm, diffuse_color, vec4(0.));  	vec4 col = vec4(0.0, 0.0, 0.0, diffuse_color.a); -	vec3 diff = pow(diffuse_color.rgb, vec3(2.2)); +	vec3 diff = diffuse_color.rgb; diff --git a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl index eebeb91bf8..968a5f6b3d 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl @@ -46,11 +46,6 @@ VARYING vec2 vary_fragcoord;  uniform mat4 inv_proj;  uniform vec2 screen_res; -vec3 getKern(int i) -{ -	return kern[i]; -} -  vec4 getPosition(vec2 pos_screen)  {  	float depth = texture2DRect(depthMap, pos_screen.xy).r; @@ -110,7 +105,7 @@ void main()  	vec2 dlt = kern_scale * delta / (1.0+norm.xy*norm.xy);  	dlt /= max(-pos.z*dist_factor, 1.0); -	vec2 defined_weight = getKern(0).xy; // special case the first (centre) sample's weight in the blur; we have to sample it anyway so we get it for 'free' +	vec2 defined_weight = kern[0].xy; // special case the first (centre) sample's weight in the blur; we have to sample it anyway so we get it for 'free'  	vec4 col = defined_weight.xyxx * ccol;  	// relax tolerance according to distance to avoid speckling artifacts, as angles and distances are a lot more abrupt within a small screen area at larger distances @@ -120,28 +115,33 @@ void main()  	float tc_mod = 0.5*(tc.x + tc.y); // mod(tc.x+tc.y,2)  	tc_mod -= floor(tc_mod);  	tc_mod *= 2.0; -	tc += ( (tc_mod - 0.5) * getKern(1).z * dlt * 0.5 ); +	tc += ( (tc_mod - 0.5) * kern[1].z * dlt * 0.5 );  	for (int i = 1; i < 4; i++)  	{ -		vec2 samptc = tc + getKern(i).z*dlt; -	        vec3 samppos = getPosition(samptc).xyz;  +		vec2 samptc = tc + kern[i].z*dlt; +	    vec3 samppos = getPosition(samptc).xyz;  +  		float d = dot(norm.xyz, samppos.xyz-pos.xyz);// dist from plane +		  		if (d*d <= pointplanedist_tolerance_pow2)  		{ -			col += texture2DRect(lightMap, samptc)*getKern(i).xyxx; -			defined_weight += getKern(i).xy; +			col += texture2DRect(lightMap, samptc)*kern[i].xyxx; +			defined_weight += kern[i].xy;  		}  	} +  	for (int i = 1; i < 4; i++)  	{ -		vec2 samptc = tc - getKern(i).z*dlt; -	        vec3 samppos = getPosition(samptc).xyz;  +		vec2 samptc = tc - kern[i].z*dlt; +	    vec3 samppos = getPosition(samptc).xyz;  +  		float d = dot(norm.xyz, samppos.xyz-pos.xyz);// dist from plane +		  		if (d*d <= pointplanedist_tolerance_pow2)  		{ -			col += texture2DRect(lightMap, samptc)*getKern(i).xyxx; -			defined_weight += getKern(i).xy; +			col += texture2DRect(lightMap, samptc)*kern[i].xyxx; +			defined_weight += kern[i].xy;  		}  	} diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl index a2c3ec3355..adc361d7a2 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl @@ -43,10 +43,12 @@ vec2 encode_normal(vec3 n)  void main()   {  	vec3 col = vertex_color.rgb * diffuseLookup(vary_texcoord0.xy).rgb; +	 +	vec3 spec; +	spec.rgb = vec3(vertex_color.a);  	frag_data[0] = vec4(col, 0.0); -	frag_data[1] = vertex_color.aaaa; // spec -	frag_data[1] = vec4(vec3(vertex_color.a), vertex_color.a+(1.0-vertex_color.a)*vertex_color.a); // spec - from former class3 - maybe better, but not so well tested +	frag_data[1] = vec4(spec, vertex_color.a); // spec  	vec3 nvn = normalize(vary_normal);  	frag_data[2] = vec4(encode_normal(nvn.xyz), vertex_color.a, 0.0);  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl index de2f74b681..618ea747f5 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl @@ -127,7 +127,7 @@ vec3 calcPointLightOrSpotLight(vec3 light_col, vec3 npos, vec3 diffuse, vec4 spe  	vec3 lv = lp.xyz-v;  	//get distance -	float d = dot(lv,lv); +	float d = length(lv);  	float da = 1.0; @@ -139,8 +139,10 @@ vec3 calcPointLightOrSpotLight(vec3 light_col, vec3 npos, vec3 diffuse, vec4 spe  		lv = normalize(lv);  		//distance attenuation -		float dist2 = d/la; -		float dist_atten = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); +		float dist = d/la; +		float dist_atten = clamp(1.0-(dist-1.0*(1.0-fa))/fa, 0.0, 1.0); +		dist_atten *= dist_atten; +		dist_atten *= 1.4;  		// spotlight coefficient.  		float spot = max(dot(-ln, lv), is_pointlight); @@ -321,9 +323,9 @@ void calcAtmospherics(vec3 inPositionEye, float ambFactor) {  		  + tmpAmbient)));  	//brightness of surface both sunlight and ambient -	setSunlitColor(pow(vec3(sunlight * .5), vec3(2.2)) * 2.2); -	setAmblitColor(pow(vec3(tmpAmbient * .25), vec3(2.2)) * 2.2); -	setAdditiveColor(pow(getAdditiveColor() * vec3(1.0 - temp1), vec3(2.2)) * 2.2); +	setSunlitColor(vec3(sunlight * .5)); +	setAmblitColor(vec3(tmpAmbient * .25)); +	setAdditiveColor(getAdditiveColor() * vec3(1.0 - temp1));  }  vec3 atmosLighting(vec3 light) @@ -617,8 +619,8 @@ void main()  	col.rgb *= ambient; -	col.rgb = col.rgb + atmosAffectDirectionalLight(final_da * 2.6); -	col.rgb *= diffuse.rgb; +	col.rgb = col.rgb + atmosAffectDirectionalLight(pow(final_da, 1.0/1.3)); +	col.rgb *= old_diffcol.rgb;  	float glare = 0.0; @@ -647,9 +649,8 @@ void main()  	{  		//add environmentmap  		vec3 env_vec = env_mat * refnormpersp; -		float exponent = mix(2.2, 1.0, diffuse.a); - -		vec3 refcol = pow(textureCube(environmentMap, env_vec).rgb, vec3(exponent))*exponent; +		 +		vec3 refcol = textureCube(environmentMap, env_vec).rgb;  		col = mix(col.rgb, refcol,   			envIntensity);   @@ -660,13 +661,12 @@ void main()  		glare += cur_glare;  	} -	float exponent = mix(1.0, 2.2, diffuse.a); -	col = pow(col, vec3(exponent)); -				 -	  	col = mix(atmosLighting(col), fullbrightAtmosTransport(col), diffuse.a);  	col = mix(scaleSoftClip(col), fullbrightScaleSoftClip(col), diffuse.a); +	//convert to linear space before adding local lights +	col = pow(col, vec3(2.2)); +  	vec3 npos = normalize(-pos.xyz); @@ -681,6 +681,7 @@ void main()  		LIGHT_LOOP(7) +	//convert to gamma space for display on screen  	col.rgb = pow(col.rgb, vec3(1.0/2.2));  	frag_color.rgb = col.rgb; diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl index b35ba549f6..868526d457 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl @@ -127,9 +127,9 @@ void main()  		bool light_contrib = (i < light_count);  		vec3 lv = light[i].xyz-pos; -		float dist2 = dot(lv,lv); -		dist2 /= light[i].w; -		if (dist2 > 1.0) +		float dist = length(lv); +		dist /= light[i].w; +		if (dist > 1.0)  		{  			light_contrib = false;  		} @@ -146,10 +146,10 @@ void main()  			da = dot(norm, lv);  			float fa = light_col[i].a+1.0; -			float dist_atten = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); +			float dist_atten = clamp(1.0-(dist-1.0*(1.0-fa))/fa, 0.0, 1.0); +			dist_atten *= dist_atten; +			dist_atten *= 2.0; -			dist_atten = pow(dist_atten, 2.2) * 2.2; -  			dist_atten *= noise;  			float lit = da * dist_atten; diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl index 36fb4afa52..97bf49a605 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl @@ -177,9 +177,9 @@ void main()  	vec3 pos = getPosition(frag.xy).xyz;  	vec3 lv = center.xyz-pos.xyz; -	float dist2 = dot(lv,lv); -	dist2 /= size; -	if (dist2 > 1.0) +	float dist = length(lv); +	dist /= size; +	if (dist > 1.0)  	{  		discard;  	} @@ -201,8 +201,10 @@ void main()  	proj_tc.xyz /= proj_tc.w;  	float fa = falloff+1.0; -	float dist_atten = min(1.0-(dist2-1.0*(1.0-fa))/fa, 1.0); -	dist_atten = pow(dist_atten, 2.2) * 2.2; +	float dist_atten = min(1.0-(dist-1.0*(1.0-fa))/fa, 1.0); +	dist_atten *= dist_atten; +	dist_atten *= 2.0; +  	if (dist_atten <= 0.0)  	{  		discard; diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl index c6b1eb7c8d..caf20ce707 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl @@ -110,9 +110,9 @@ void main()  	vec3 pos = getPosition(frag.xy).xyz;  	vec3 lv = trans_center.xyz-pos; -	float dist2 = dot(lv,lv); -	dist2 /= size; -	if (dist2 > 1.0) +	float dist = length(lv); +	dist /= size; +	if (dist > 1.0)  	{  		discard;  	} @@ -133,8 +133,10 @@ void main()  	vec3 col = texture2DRect(diffuseRect, frag.xy).rgb;  	float fa = falloff+1.0; -	float dist_atten = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0); -	dist_atten = pow(dist_atten, 2.2) * 2.2; +	float dist_atten = clamp(1.0-(dist-1.0*(1.0-fa))/fa, 0.0, 1.0); +	dist_atten *= dist_atten; +	dist_atten *= 2.0; +	  	float lit = da * dist_atten * noise;  	col = color.rgb*lit*col; diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl index 9491421236..a5625fbc16 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl @@ -37,7 +37,7 @@ VARYING vec3 trans_center;  void main()  {  	//transform vertex -	vec3 p = position*sqrt(size)+center; +	vec3 p = position*size+center;  	vec4 pos = modelview_projection_matrix * vec4(p.xyz, 1.0);  	vary_fragcoord = pos;  	trans_center = (modelview_matrix*vec4(center.xyz, 1.0)).xyz; diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl index b40850e769..08583ad0f2 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl @@ -248,9 +248,9 @@ void calcAtmospherics(vec3 inPositionEye, float ambFactor) {  		  + tmpAmbient)));  	//brightness of surface both sunlight and ambient -	setSunlitColor(pow(vec3(sunlight * .5), vec3(global_gamma)) * global_gamma); -	setAmblitColor(pow(vec3(tmpAmbient * .25), vec3(global_gamma)) * global_gamma); -	setAdditiveColor(pow(getAdditiveColor() * vec3(1.0 - temp1), vec3(global_gamma)) * global_gamma); +	setSunlitColor(vec3(sunlight * .5)); +	setAmblitColor(vec3(tmpAmbient * .25)); +	setAdditiveColor(getAdditiveColor() * vec3(1.0 - temp1));  }  vec3 atmosLighting(vec3 light) @@ -325,8 +325,13 @@ void main()  	norm.xyz = decode_normal(norm.xy); // unpack norm  	float da = max(dot(norm.xyz, sun_dir.xyz), 0.0); +	da = pow(da, 1.0/1.3);  	vec4 diffuse = texture2DRect(diffuseRect, tc); + +	//convert to gamma space +	diffuse.rgb = pow(diffuse.rgb, vec3(1.0/2.2)); +  	vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);  	vec3 col;  	float bloom = 0.0; @@ -341,7 +346,7 @@ void main()  		col.rgb *= ambient; -		col += atmosAffectDirectionalLight(max(min(da, 1.0) * 2.6, 0.0)); +		col += atmosAffectDirectionalLight(max(min(da, 1.0), 0.0));  		col *= diffuse.rgb; @@ -362,23 +367,18 @@ void main()  		} -		col = mix(col.rgb, pow(diffuse.rgb, vec3(1.0/2.2)), diffuse.a); -		 -		 +		col = mix(col.rgb, diffuse.rgb, diffuse.a); +				  		if (envIntensity > 0.0)  		{ //add environmentmap  			vec3 env_vec = env_mat * refnormpersp; -			float exponent = mix(2.2, 1.0, diffuse.a); -			vec3 refcol = pow(textureCube(environmentMap, env_vec).rgb, vec3(exponent))*exponent; +			 +			vec3 refcol = textureCube(environmentMap, env_vec).rgb;  			col = mix(col.rgb, refcol,   				envIntensity);   -  		} - -		float exponent = mix(1.0, 2.2, diffuse.a); -		col = pow(col, vec3(exponent));  		if (norm.w < 0.5)  		{ @@ -386,10 +386,12 @@ void main()  			col = mix(scaleSoftClip(col), fullbrightScaleSoftClip(col), diffuse.a);  		} +		col = pow(col, vec3(2.2)); +  		//col = vec3(1,0,1);  		//col.g = envIntensity;  	} -	 +  	frag_color.rgb = col;  	frag_color.a = bloom; diff --git a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl index 3539c8d2b2..1975b18652 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl @@ -175,9 +175,9 @@ void main()  	vec3 pos = getPosition(frag.xy).xyz;  	vec3 lv = trans_center.xyz-pos.xyz; -	float dist2 = dot(lv,lv); -	dist2 /= size; -	if (dist2 > 1.0) +	float dist = length(lv); +	dist /= size; +	if (dist > 1.0)  	{  		discard;  	} @@ -199,8 +199,10 @@ void main()  	proj_tc.xyz /= proj_tc.w;  	float fa = falloff+1.0; -	float dist_atten = min(1.0-(dist2-1.0*(1.0-fa))/fa, 1.0); -	dist_atten = pow(dist_atten, 2.2) * 2.2; +	float dist_atten = min(1.0-(dist-1.0*(1.0-fa))/fa, 1.0); +	dist_atten *= dist_atten; +	dist_atten *= 2.0; +  	if (dist_atten <= 0.0)  	{  		discard; @@ -279,10 +281,7 @@ void main()  			//col += spec.rgb;  		}  	}	 -	 -	 -	 -	 +  	if (envIntensity > 0.0)  	{ diff --git a/indra/newview/app_settings/shaders/class1/interface/downsampleDepthF.glsl b/indra/newview/app_settings/shaders/class1/interface/downsampleDepthF.glsl new file mode 100644 index 0000000000..6523a06d22 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/interface/downsampleDepthF.glsl @@ -0,0 +1,67 @@ +/**  + * @file debugF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + *  + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + *  + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details. + *  + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + *  + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA + * $/LicenseInfo$ + */ + +#ifdef DEFINE_GL_FRAGCOLOR +out vec4 frag_color; +#else +#define frag_color gl_FragColor +#endif + +uniform sampler2D depthMap; + +uniform float delta; + +VARYING vec2 tc0; +VARYING vec2 tc1; +VARYING vec2 tc2; +VARYING vec2 tc3; +VARYING vec2 tc4; +VARYING vec2 tc5; +VARYING vec2 tc6; +VARYING vec2 tc7; +VARYING vec2 tc8; + +void main()  +{ +	vec4 depth1 =  +		vec4(texture2D(depthMap, tc0).r, +			texture2D(depthMap, tc1).r, +			texture2D(depthMap, tc2).r, +			texture2D(depthMap, tc3).r); + +	vec4 depth2 =  +		vec4(texture2D(depthMap, tc4).r, +			texture2D(depthMap, tc5).r, +			texture2D(depthMap, tc6).r, +			texture2D(depthMap, tc7).r); + +	depth1 = min(depth1, depth2); +	float depth = min(depth1.x, depth1.y); +	depth = min(depth, depth1.z); +	depth = min(depth, depth1.w); +	depth = min(depth, texture2D(depthMap, tc8).r); + +	gl_FragDepth = depth; +} diff --git a/indra/newview/app_settings/shaders/class1/interface/downsampleDepthRectF.glsl b/indra/newview/app_settings/shaders/class1/interface/downsampleDepthRectF.glsl new file mode 100644 index 0000000000..2f89b8ed72 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/interface/downsampleDepthRectF.glsl @@ -0,0 +1,67 @@ +/**  + * @file debugF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + *  + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + *  + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details. + *  + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + *  + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA + * $/LicenseInfo$ + */ + +#ifdef DEFINE_GL_FRAGCOLOR +out vec4 frag_color; +#else +#define frag_color gl_FragColor +#endif + +uniform sampler2DRect depthMap; + +uniform float delta; + +VARYING vec2 tc0; +VARYING vec2 tc1; +VARYING vec2 tc2; +VARYING vec2 tc3; +VARYING vec2 tc4; +VARYING vec2 tc5; +VARYING vec2 tc6; +VARYING vec2 tc7; +VARYING vec2 tc8; + +void main()  +{ +	vec4 depth1 =  +		vec4(texture2DRect(depthMap, tc0).r, +			texture2DRect(depthMap, tc1).r, +			texture2DRect(depthMap, tc2).r, +			texture2DRect(depthMap, tc3).r); + +	vec4 depth2 =  +		vec4(texture2DRect(depthMap, tc4).r, +			texture2DRect(depthMap, tc5).r, +			texture2DRect(depthMap, tc6).r, +			texture2DRect(depthMap, tc7).r); + +	depth1 = min(depth1, depth2); +	float depth = min(depth1.x, depth1.y); +	depth = min(depth, depth1.z); +	depth = min(depth, depth1.w); +	depth = min(depth, texture2DRect(depthMap, tc8).r); + +	gl_FragDepth = depth; +} diff --git a/indra/newview/app_settings/shaders/class1/interface/downsampleDepthV.glsl b/indra/newview/app_settings/shaders/class1/interface/downsampleDepthV.glsl new file mode 100644 index 0000000000..71d80911d6 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/interface/downsampleDepthV.glsl @@ -0,0 +1,59 @@ +/**  + * @file debugV.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + *  + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + *  + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details. + *  + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + *  + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA + * $/LicenseInfo$ + */ + +uniform mat4 modelview_projection_matrix; + +ATTRIBUTE vec3 position; + +uniform vec2 screen_res; + +uniform vec2 delta; + +VARYING vec2 tc0; +VARYING vec2 tc1; +VARYING vec2 tc2; +VARYING vec2 tc3; +VARYING vec2 tc4; +VARYING vec2 tc5; +VARYING vec2 tc6; +VARYING vec2 tc7; +VARYING vec2 tc8; + +void main() +{ +	gl_Position = vec4(position, 1.0);  +	 +	vec2 tc = (position.xy*0.5+0.5)*screen_res; +	tc0 = tc+vec2(-delta.x,-delta.y); +	tc1 = tc+vec2(0,-delta.y); +	tc2 = tc+vec2(delta.x,-delta.y); +	tc3 = tc+vec2(-delta.x,0); +	tc4 = tc+vec2(0,0); +	tc5 = tc+vec2(delta.x,0); +	tc6 = tc+vec2(-delta.x,delta.y); +	tc7 = tc+vec2(0,delta.y); +	tc8 = tc+vec2(delta.x,delta.y); +} + | 
