diff options
Diffstat (limited to 'indra/newview')
35 files changed, 300 insertions, 241 deletions
| diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl index 40b0cf47ac..eada38eaaa 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl @@ -55,6 +55,12 @@ uniform vec3 light_direction[8];  uniform vec3 light_attenuation[8];   uniform vec3 light_diffuse[8]; +float calcDirectionalLight(vec3 n, vec3 l) +{ +        float a = max(dot(n,l),0.0); +        return a; +} +  float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)  {  	//get light vector diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl index 8c96d55342..5c36118a50 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl @@ -64,6 +64,12 @@ uniform vec3 light_direction[8];  uniform vec3 light_attenuation[8];   uniform vec3 light_diffuse[8]; +float calcDirectionalLight(vec3 n, vec3 l) +{ +        float a = max(dot(n,l),0.0); +        return a; +} +  float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)  {  	//get light vector diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl index c0edddc40a..d6149fcc32 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl @@ -59,6 +59,12 @@ uniform vec3 light_direction[8];  uniform vec3 light_attenuation[8];   uniform vec3 light_diffuse[8]; +float calcDirectionalLight(vec3 n, vec3 l) +{ +        float a = max(dot(n,l),0.0); +        return a; +} +  float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)  {  	//get light vector diff --git a/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl b/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl index 64e094e3c5..17f425475c 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl @@ -50,18 +50,18 @@ uniform vec4 sunlight_color;  uniform vec4 ambient;  uniform vec4 blue_horizon;  uniform vec4 blue_density; -uniform vec4 haze_horizon; -uniform vec4 haze_density; +uniform float haze_horizon; +uniform float haze_density; -uniform vec4 cloud_shadow; -uniform vec4 density_multiplier; -uniform vec4 max_y; +uniform float cloud_shadow; +uniform float density_multiplier; +uniform float max_y;  uniform vec4 glow;  uniform vec4 cloud_color; -uniform vec4 cloud_scale; +uniform float cloud_scale;  void main()  { @@ -77,7 +77,7 @@ void main()  	// Set altitude  	if (P.y > 0.)  	{ -		P *= (max_y.x / P.y); +		P *= (max_y / P.y);  	}  	else  	{ @@ -99,12 +99,12 @@ void main()  	// Sunlight attenuation effect (hue and brightness) due to atmosphere  	// this is used later for sunlight modulation at various altitudes -	light_atten = (blue_density * 1.0 + haze_density.x * 0.25) * (density_multiplier.x * max_y.x); +	light_atten = (blue_density + vec4(haze_density * 0.25)) * (density_multiplier * max_y);  	// Calculate relative weights -	temp1 = blue_density + haze_density.x; +	temp1 = blue_density + haze_density;  	blue_weight = blue_density / temp1; -	haze_weight = haze_density.x / temp1; +	haze_weight = haze_density / temp1;  	// Compute sunlight from P & lightnorm (for long rays like sky)  	temp2.y = max(0., max(0., Pn.y) * 1.0 + lightnorm.y ); @@ -112,7 +112,7 @@ void main()  	sunlight *= exp( - light_atten * temp2.y);  	// Distance -	temp2.z = Plen * density_multiplier.x; +	temp2.z = Plen * density_multiplier;  	// Transparency (-> temp1)  	// ATI Bugfix -- can't store temp1*temp2.z in a variable because the ati @@ -136,14 +136,14 @@ void main()  	// Increase ambient when there are more clouds  	vec4 tmpAmbient = ambient; -	tmpAmbient += (1. - tmpAmbient) * cloud_shadow.x * 0.5;  +	tmpAmbient += (1. - tmpAmbient) * cloud_shadow * 0.5;   	// Dim sunlight by cloud shadow percentage -	sunlight *= (1. - cloud_shadow.x); +	sunlight *= (1. - cloud_shadow);  	// Haze color below cloud  	vec4 additiveColorBelowCloud = (	  blue_horizon * blue_weight * (sunlight + tmpAmbient) -				+ (haze_horizon.r * haze_weight) * (sunlight * temp2.x + tmpAmbient) +				+ (haze_horizon * haze_weight) * (sunlight * temp2.x + tmpAmbient)  			 );	  	// CLOUDS @@ -164,13 +164,13 @@ void main()  	vec4 oHazeColorBelowCloud = additiveColorBelowCloud * (1. - temp1);  	// Make a nice cloud density based on the cloud_shadow value that was passed in. -	vary_CloudDensity = 2. * (cloud_shadow.x - 0.25); +	vary_CloudDensity = 2. * (cloud_shadow - 0.25);  	// Texture coords  	vary_texcoord0 = texcoord0;  	vary_texcoord0.xy -= 0.5; -	vary_texcoord0.xy /= cloud_scale.x; +	vary_texcoord0.xy /= cloud_scale;  	vary_texcoord0.xy += 0.5;  	vary_texcoord1 = vary_texcoord0; diff --git a/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl b/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl index 721de18e0b..2c8808bdce 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl @@ -44,12 +44,12 @@ uniform vec4 sunlight_color;  uniform vec4 ambient;  uniform vec4 blue_horizon;  uniform vec4 blue_density; -uniform vec4 haze_horizon; -uniform vec4 haze_density; +uniform float haze_horizon; +uniform float haze_density; -uniform vec4 cloud_shadow; -uniform vec4 density_multiplier; -uniform vec4 max_y; +uniform float cloud_shadow; +uniform float density_multiplier; +uniform float max_y;  uniform vec4 glow; @@ -71,7 +71,7 @@ void main()  	// Set altitude  	if (P.y > 0.)  	{ -		P *= (max_y.x / P.y); +		P *= (max_y / P.y);  	}  	else  	{ @@ -93,12 +93,12 @@ void main()  	// Sunlight attenuation effect (hue and brightness) due to atmosphere  	// this is used later for sunlight modulation at various altitudes -	light_atten = (blue_density * 1.0 + haze_density.x * 0.25) * (density_multiplier.x * max_y.x); +	light_atten = (blue_density + vec4(haze_density * 0.25)) * (density_multiplier * max_y);  	// Calculate relative weights -	temp1 = blue_density + haze_density.x; +	temp1 = blue_density + haze_density;  	blue_weight = blue_density / temp1; -	haze_weight = haze_density.x / temp1; +	haze_weight = haze_density / temp1;  	// Compute sunlight from P & lightnorm (for long rays like sky)  	temp2.y = max(0., max(0., Pn.y) * 1.0 + lightnorm.y ); @@ -106,7 +106,7 @@ void main()  	sunlight *= exp( - light_atten * temp2.y);  	// Distance -	temp2.z = Plen * density_multiplier.x; +	temp2.z = Plen * density_multiplier;  	// Transparency (-> temp1)  	// ATI Bugfix -- can't store temp1*temp2.z in a variable because the ati @@ -131,20 +131,20 @@ void main()  	// Haze color above cloud  	vary_HazeColor = (	  blue_horizon * blue_weight * (sunlight + ambient) -				+ (haze_horizon.r * haze_weight) * (sunlight * temp2.x + ambient) +				+ (haze_horizon * haze_weight) * (sunlight * temp2.x + ambient)  			 );	  	// Increase ambient when there are more clouds  	vec4 tmpAmbient = ambient; -	tmpAmbient += (1. - tmpAmbient) * cloud_shadow.x * 0.5;  +	tmpAmbient += (1. - tmpAmbient) * cloud_shadow * 0.5;   	// Dim sunlight by cloud shadow percentage -	sunlight *= (1. - cloud_shadow.x); +	sunlight *= (1. - cloud_shadow);  	// Haze color below cloud  	vec4 additiveColorBelowCloud = (	  blue_horizon * blue_weight * (sunlight + tmpAmbient) -				+ (haze_horizon.r * haze_weight) * (sunlight * temp2.x + tmpAmbient) +				+ (haze_horizon * haze_weight) * (sunlight * temp2.x + tmpAmbient)  			 );	  	// Final atmosphere additive diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl index 51110ae4df..0c53a4ffa5 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl @@ -51,12 +51,12 @@ uniform vec4 sunlight_color;  uniform vec4 ambient;  uniform vec4 blue_horizon;  uniform vec4 blue_density; -uniform vec4 haze_horizon; -uniform vec4 haze_density; -uniform vec4 cloud_shadow; -uniform vec4 density_multiplier; -uniform vec4 distance_multiplier; -uniform vec4 max_y; +uniform float haze_horizon; +uniform float haze_density; +uniform float cloud_shadow; +uniform float density_multiplier; +uniform float distance_multiplier; +uniform float max_y;  uniform vec4 glow;  uniform float scene_light_strength;  uniform mat3 env_mat; @@ -159,13 +159,13 @@ void calcAtmospherics(vec3 inPositionEye, float ambFactor) {  	//sunlight attenuation effect (hue and brightness) due to atmosphere  	//this is used later for sunlight modulation at various altitudes -	light_atten = (blue_density * 1.0 + vec4(haze_density.r) * 0.25) * (density_multiplier.x * max_y.x); +	light_atten = (blue_density + vec4(haze_density * 0.25)) * (density_multiplier * max_y);  		//I had thought blue_density and haze_density should have equal weighting,  		//but attenuation due to haze_density tends to seem too strong -	temp1 = blue_density + vec4(haze_density.r); +	temp1 = blue_density + vec4(haze_density);  	blue_weight = blue_density / temp1; -	haze_weight = vec4(haze_density.r) / temp1; +	haze_weight = vec4(haze_density) / temp1;  	//(TERRAIN) compute sunlight from lightnorm only (for short rays like terrain)  	temp2.y = max(0.0, tmpLightnorm.y); @@ -173,12 +173,12 @@ void calcAtmospherics(vec3 inPositionEye, float ambFactor) {  	sunlight *= exp( - light_atten * temp2.y);  	// main atmospheric scattering line integral -	temp2.z = Plen * density_multiplier.x; +	temp2.z = Plen * density_multiplier;  	// Transparency (-> temp1) -	// ATI Bugfix -- can't store temp1*temp2.z*distance_multiplier.x in a variable because the ati +	// ATI Bugfix -- can't store temp1*temp2.z*distance_multiplier in a variable because the ati  	// compiler gets confused. -	temp1 = exp(-temp1 * temp2.z * distance_multiplier.x); +	temp1 = exp(-temp1 * temp2.z * distance_multiplier);  	//final atmosphere attenuation factor  	setAtmosAttenuation(temp1.rgb); @@ -199,7 +199,7 @@ void calcAtmospherics(vec3 inPositionEye, float ambFactor) {  	temp2.x += .25;  	//increase ambient when there are more clouds -	vec4 tmpAmbient = ambient + (vec4(1.) - ambient) * cloud_shadow.x * 0.5; +	vec4 tmpAmbient = ambient + (vec4(1.) - ambient) * cloud_shadow * 0.5;  	/*  decrease value and saturation (that in HSV, not HSL) for occluded areas  	 * // for HSV color/geometry used here, see http://gimp-savvy.com/BOOK/index.html?node52.html @@ -213,8 +213,8 @@ void calcAtmospherics(vec3 inPositionEye, float ambFactor) {  	//haze color  	setAdditiveColor( -		vec3(blue_horizon * blue_weight * (sunlight*(1.-cloud_shadow.x) + tmpAmbient) -	  + (haze_horizon.r * haze_weight) * (sunlight*(1.-cloud_shadow.x) * temp2.x +		vec3(blue_horizon * blue_weight * (sunlight*(1.-cloud_shadow) + tmpAmbient) +	  + (haze_horizon * haze_weight) * (sunlight*(1.-cloud_shadow) * temp2.x  		  + tmpAmbient)));  	//brightness of surface both sunlight and ambient diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl index 83815b1786..9629cfe824 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl @@ -61,6 +61,12 @@ uniform vec3 light_direction[8];  uniform vec3 light_attenuation[8];   uniform vec3 light_diffuse[8]; +float calcDirectionalLight(vec3 n, vec3 l) +{ +        float a = max(dot(n,l),0.0); +        return a; +} +  float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)  {  //get light vector diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl index 1660f9687e..1586aab0f2 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl @@ -63,6 +63,12 @@ uniform vec3 light_direction[8];  uniform vec3 light_attenuation[8];   uniform vec3 light_diffuse[8]; +float calcDirectionalLight(vec3 n, vec3 l) +{ +        float a = max(dot(n,l),0.0); +        return a; +} +  float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)  {  	//get light vector diff --git a/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl b/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl index 84c27edb26..44aaa98b97 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl @@ -60,6 +60,12 @@ uniform vec3 light_direction[8];  uniform vec3 light_attenuation[8];   uniform vec3 light_diffuse[8]; +float calcDirectionalLight(vec3 n, vec3 l) +{ +        float a = max(dot(n,l),0.0); +        return a; +} +  float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)  {  	//get light vector diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl index 97f3063a9e..27ea77b5a2 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl @@ -51,12 +51,12 @@ uniform vec4 sunlight_color;  uniform vec4 ambient;  uniform vec4 blue_horizon;  uniform vec4 blue_density; -uniform vec4 haze_horizon; -uniform vec4 haze_density; -uniform vec4 cloud_shadow; -uniform vec4 density_multiplier; -uniform vec4 distance_multiplier; -uniform vec4 max_y; +uniform float haze_horizon; +uniform float haze_density; +uniform float cloud_shadow; +uniform float density_multiplier; +uniform float distance_multiplier; +uniform float max_y;  uniform vec4 glow;  uniform float scene_light_strength;  uniform mat3 env_mat; @@ -161,13 +161,13 @@ void calcAtmospherics(vec3 inPositionEye, float ambFactor) {  	//sunlight attenuation effect (hue and brightness) due to atmosphere  	//this is used later for sunlight modulation at various altitudes -	light_atten = (blue_density * 1.0 + vec4(haze_density.r) * 0.25) * (density_multiplier.x * max_y.x); +	light_atten = (blue_density + vec4(haze_density * 0.25)) * (density_multiplier * max_y);  		//I had thought blue_density and haze_density should have equal weighting,  		//but attenuation due to haze_density tends to seem too strong -	temp1 = blue_density + vec4(haze_density.r); +	temp1 = blue_density + vec4(haze_density);  	blue_weight = blue_density / temp1; -	haze_weight = vec4(haze_density.r) / temp1; +	haze_weight = vec4(haze_density) / temp1;  	//(TERRAIN) compute sunlight from lightnorm only (for short rays like terrain)  	temp2.y = max(0.0, tmpLightnorm.y); @@ -175,12 +175,12 @@ void calcAtmospherics(vec3 inPositionEye, float ambFactor) {  	sunlight *= exp( - light_atten * temp2.y);  	// main atmospheric scattering line integral -	temp2.z = Plen * density_multiplier.x; +	temp2.z = Plen * density_multiplier;  	// Transparency (-> temp1) -	// ATI Bugfix -- can't store temp1*temp2.z*distance_multiplier.x in a variable because the ati +	// ATI Bugfix -- can't store temp1*temp2.z*distance_multiplier in a variable because the ati  	// compiler gets confused. -	temp1 = exp(-temp1 * temp2.z * distance_multiplier.x); +	temp1 = exp(-temp1 * temp2.z * distance_multiplier);  	//final atmosphere attenuation factor  	setAtmosAttenuation(temp1.rgb); @@ -201,7 +201,7 @@ void calcAtmospherics(vec3 inPositionEye, float ambFactor) {  	temp2.x += .25;  	//increase ambient when there are more clouds -	vec4 tmpAmbient = ambient + (vec4(1.) - ambient) * cloud_shadow.x * 0.5; +	vec4 tmpAmbient = ambient + (vec4(1.) - ambient) * cloud_shadow * 0.5;  	/*  decrease value and saturation (that in HSV, not HSL) for occluded areas  	 * // for HSV color/geometry used here, see http://gimp-savvy.com/BOOK/index.html?node52.html @@ -215,8 +215,8 @@ void calcAtmospherics(vec3 inPositionEye, float ambFactor) {  	//haze color  	setAdditiveColor( -		vec3(blue_horizon * blue_weight * (sunlight*(1.-cloud_shadow.x) + tmpAmbient) -	  + (haze_horizon.r * haze_weight) * (sunlight*(1.-cloud_shadow.x) * temp2.x +		vec3(blue_horizon * blue_weight * (sunlight*(1.-cloud_shadow) + tmpAmbient) +	  + (haze_horizon * haze_weight) * (sunlight*(1.-cloud_shadow) * temp2.x  		  + tmpAmbient)));  	//brightness of surface both sunlight and ambient diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl index 6a83be1426..da3d922017 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl @@ -47,12 +47,12 @@ uniform vec4 sunlight_color;  uniform vec4 ambient;  uniform vec4 blue_horizon;  uniform vec4 blue_density; -uniform vec4 haze_horizon; -uniform vec4 haze_density; -uniform vec4 cloud_shadow; -uniform vec4 density_multiplier; -uniform vec4 distance_multiplier; -uniform vec4 max_y; +uniform float haze_horizon; +uniform float haze_density; +uniform float cloud_shadow; +uniform float density_multiplier; +uniform float distance_multiplier; +uniform float max_y;  uniform vec4 glow;  void calcAtmospherics(vec3 inPositionEye) { @@ -61,8 +61,8 @@ void calcAtmospherics(vec3 inPositionEye) {  	setPositionEye(P);  	//(TERRAIN) limit altitude -	if (P.y > max_y.x) P *= (max_y.x / P.y); -	if (P.y < -max_y.x) P *= (-max_y.x / P.y); +	if (P.y > max_y) P *= (max_y / P.y); +	if (P.y < -max_y) P *= (-max_y / P.y);  	vec3 tmpLightnorm = lightnorm.xyz; @@ -78,13 +78,13 @@ void calcAtmospherics(vec3 inPositionEye) {  	//sunlight attenuation effect (hue and brightness) due to atmosphere  	//this is used later for sunlight modulation at various altitudes -	light_atten = (blue_density * 1.0 + vec4(haze_density.r) * 0.25) * (density_multiplier.x * max_y.x); +	light_atten = (blue_density + vec4(haze_density * 0.25)) * (density_multiplier * max_y);  		//I had thought blue_density and haze_density should have equal weighting,  		//but attenuation due to haze_density tends to seem too strong -	temp1 = blue_density + vec4(haze_density.r); +	temp1 = blue_density + vec4(haze_density);  	blue_weight = blue_density / temp1; -	haze_weight = vec4(haze_density.r) / temp1; +	haze_weight = vec4(haze_density) / temp1;  	//(TERRAIN) compute sunlight from lightnorm only (for short rays like terrain)  	temp2.y = max(0.0, tmpLightnorm.y); @@ -92,12 +92,12 @@ void calcAtmospherics(vec3 inPositionEye) {  	sunlight *= exp( - light_atten * temp2.y);  	// main atmospheric scattering line integral -	temp2.z = Plen * density_multiplier.x; +	temp2.z = Plen * density_multiplier;  	// Transparency (-> temp1) -	// ATI Bugfix -- can't store temp1*temp2.z*distance_multiplier.x in a variable because the ati +	// ATI Bugfix -- can't store temp1*temp2.z*distance_multiplier in a variable because the ati  	// compiler gets confused. -	temp1 = exp(-temp1 * temp2.z * distance_multiplier.x); +	temp1 = exp(-temp1 * temp2.z * distance_multiplier);  	//final atmosphere attenuation factor  	setAtmosAttenuation(temp1.rgb); @@ -122,12 +122,12 @@ void calcAtmospherics(vec3 inPositionEye) {  	//increase ambient when there are more clouds -	vec4 tmpAmbient = ambient + (vec4(1.) - ambient) * cloud_shadow.x * 0.5; +	vec4 tmpAmbient = ambient + (vec4(1.) - ambient) * cloud_shadow * 0.5;  	//haze color  	setAdditiveColor( -		vec3(blue_horizon * blue_weight * (sunlight*(1.-cloud_shadow.x) + tmpAmbient) -	  + (haze_horizon.r * haze_weight) * (sunlight*(1.-cloud_shadow.x) * temp2.x +		vec3(blue_horizon * blue_weight * (sunlight*(1.-cloud_shadow) + tmpAmbient) +	  + (haze_horizon * haze_weight) * (sunlight*(1.-cloud_shadow) * temp2.x  		  + tmpAmbient)));  	//brightness of surface both sunlight and ambient diff --git a/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl b/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl index c5bb52169c..2406359721 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl @@ -49,12 +49,12 @@ uniform vec4 sunlight_color;  uniform vec4 ambient;  uniform vec4 blue_horizon;  uniform vec4 blue_density; -uniform vec4 haze_horizon; -uniform vec4 haze_density; +uniform float haze_horizon; +uniform float haze_density; -uniform vec4 cloud_shadow; -uniform vec4 density_multiplier; -uniform vec4 max_y; +uniform float cloud_shadow; +uniform float density_multiplier; +uniform float max_y;  uniform vec4 glow; @@ -76,7 +76,7 @@ void main()  	// Set altitude  	if (P.y > 0.)  	{ -		P *= (max_y.x / P.y); +		P *= (max_y / P.y);  	}  	else  	{ @@ -98,12 +98,12 @@ void main()  	// Sunlight attenuation effect (hue and brightness) due to atmosphere  	// this is used later for sunlight modulation at various altitudes -	light_atten = (blue_density * 1.0 + haze_density.x * 0.25) * (density_multiplier.x * max_y.x); +	light_atten = (blue_density + vec4(haze_density * 0.25)) * (density_multiplier * max_y);  	// Calculate relative weights -	temp1 = blue_density + haze_density.x; +	temp1 = blue_density + haze_density;  	blue_weight = blue_density / temp1; -	haze_weight = haze_density.x / temp1; +	haze_weight = haze_density / temp1;  	// Compute sunlight from P & lightnorm (for long rays like sky)  	temp2.y = max(0., max(0., Pn.y) * 1.0 + lightnorm.y ); @@ -111,7 +111,7 @@ void main()  	sunlight *= exp( - light_atten * temp2.y);  	// Distance -	temp2.z = Plen * density_multiplier.x; +	temp2.z = Plen * density_multiplier;  	// Transparency (-> temp1)  	// ATI Bugfix -- can't store temp1*temp2.z in a variable because the ati @@ -135,14 +135,14 @@ void main()  	// Increase ambient when there are more clouds  	vec4 tmpAmbient = ambient; -	tmpAmbient += (1. - tmpAmbient) * cloud_shadow.x * 0.5;  +	tmpAmbient += (1. - tmpAmbient) * cloud_shadow * 0.5;   	// Dim sunlight by cloud shadow percentage -	sunlight *= (1. - cloud_shadow.x); +	sunlight *= (1. - cloud_shadow);  	// Haze color below cloud  	vec4 additiveColorBelowCloud = (	  blue_horizon * blue_weight * (sunlight + tmpAmbient) -				+ (haze_horizon.r * haze_weight) * (sunlight * temp2.x + tmpAmbient) +				+ (haze_horizon * haze_weight) * (sunlight * temp2.x + tmpAmbient)  			 );	  	// CLOUDS @@ -163,7 +163,7 @@ void main()  	vec4 oHazeColorBelowCloud = additiveColorBelowCloud * (1. - temp1);  	// Make a nice cloud density based on the cloud_shadow value that was passed in. -	vary_CloudDensity = 2. * (cloud_shadow.x - 0.25); +	vary_CloudDensity = 2. * (cloud_shadow - 0.25);  	// Texture coords diff --git a/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl b/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl index 46773cf89f..6a87caa8cf 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl @@ -42,12 +42,12 @@ uniform vec4 sunlight_color;  uniform vec4 ambient;  uniform vec4 blue_horizon;  uniform vec4 blue_density; -uniform vec4 haze_horizon; -uniform vec4 haze_density; +uniform float haze_horizon; +uniform float haze_density; -uniform vec4 cloud_shadow; -uniform vec4 density_multiplier; -uniform vec4 max_y; +uniform float cloud_shadow; +uniform float density_multiplier; +uniform float max_y;  uniform vec4 glow; @@ -68,7 +68,7 @@ void main()  	// Set altitude  	if (P.y > 0.)  	{ -		P *= (max_y.x / P.y); +		P *= (max_y / P.y);  	}  	else  	{ @@ -87,15 +87,14 @@ void main()  	vec4 sunlight = sunlight_color;  	vec4 light_atten; -  	// Sunlight attenuation effect (hue and brightness) due to atmosphere  	// this is used later for sunlight modulation at various altitudes -	light_atten = (blue_density * 1.0 + haze_density.x * 0.25) * (density_multiplier.x * max_y.x); +	light_atten = (blue_density + vec4(haze_density * 0.25)) * (density_multiplier * max_y);  	// Calculate relative weights -	temp1 = blue_density + haze_density.x; +	temp1 = blue_density + haze_density;  	blue_weight = blue_density / temp1; -	haze_weight = haze_density.x / temp1; +	haze_weight = haze_density / temp1;  	// Compute sunlight from P & lightnorm (for long rays like sky)  	temp2.y = max(0., max(0., Pn.y) * 1.0 + lightnorm.y ); @@ -103,7 +102,7 @@ void main()  	sunlight *= exp( - light_atten * temp2.y);  	// Distance -	temp2.z = Plen * density_multiplier.x; +	temp2.z = Plen * density_multiplier;  	// Transparency (-> temp1)  	// ATI Bugfix -- can't store temp1*temp2.z in a variable because the ati @@ -128,20 +127,20 @@ void main()  	// Haze color above cloud  	vary_HazeColor = (	  blue_horizon * blue_weight * (sunlight + ambient) -				+ (haze_horizon.r * haze_weight) * (sunlight * temp2.x + ambient) +				+ (haze_horizon * haze_weight) * (sunlight * temp2.x + ambient)  			 );	  	// Increase ambient when there are more clouds  	vec4 tmpAmbient = ambient; -	tmpAmbient += (1. - tmpAmbient) * cloud_shadow.x * 0.5;  +	tmpAmbient += (1. - tmpAmbient) * cloud_shadow * 0.5;   	// Dim sunlight by cloud shadow percentage -	sunlight *= (1. - cloud_shadow.x); +	sunlight *= (1. - cloud_shadow);  	// Haze color below cloud  	vec4 additiveColorBelowCloud = (	  blue_horizon * blue_weight * (sunlight + tmpAmbient) -				+ (haze_horizon.r * haze_weight) * (sunlight * temp2.x + tmpAmbient) +				+ (haze_horizon * haze_weight) * (sunlight * temp2.x + tmpAmbient)  			 );	  	// Final atmosphere additive diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt index 0f33d40ac3..76bb2b0976 100644 --- a/indra/newview/featuretable.txt +++ b/indra/newview/featuretable.txt @@ -42,7 +42,6 @@ RenderGamma					1	0  RenderGlowResolutionPow		1	9  RenderGround				1	1  RenderMaxPartCount			1	8192 -RenderNightBrightness		1	1.0  RenderObjectBump			1	1  RenderLocalLights			1	1  RenderReflectionDetail		1	4 diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt index 8142311a55..5e217e000a 100644 --- a/indra/newview/featuretable_linux.txt +++ b/indra/newview/featuretable_linux.txt @@ -43,7 +43,6 @@ RenderGlowResolutionPow		1	9  RenderGround				1	1  RenderLocalLights			1	1  RenderMaxPartCount			1	8192 -RenderNightBrightness		1	1.0  RenderObjectBump			1	1  RenderReflectionDetail		1	4  RenderTerrainDetail			1	1 diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt index 942c043081..915a012a39 100644 --- a/indra/newview/featuretable_mac.txt +++ b/indra/newview/featuretable_mac.txt @@ -43,7 +43,6 @@ RenderGlowResolutionPow			1	9  RenderGround					1	1  RenderLocalLights				1	1  RenderMaxPartCount				1	8192 -RenderNightBrightness			1	1.0  RenderObjectBump				1	1  RenderReflectionDetail			1	4  RenderTerrainDetail				1	1 diff --git a/indra/newview/featuretable_xp.txt b/indra/newview/featuretable_xp.txt index 278d601860..ae2cf910f2 100644 --- a/indra/newview/featuretable_xp.txt +++ b/indra/newview/featuretable_xp.txt @@ -43,7 +43,6 @@ RenderGlowResolutionPow		1	9  RenderGround				1	1  RenderLocalLights			1	1  RenderMaxPartCount			1	8192 -RenderNightBrightness		1	1.0  RenderObjectBump			1	1  RenderReflectionDetail		1	4  RenderTerrainDetail			1	1 diff --git a/indra/newview/llfloatereditsky.cpp b/indra/newview/llfloatereditsky.cpp index abee7b5dc9..352361ce9e 100644 --- a/indra/newview/llfloatereditsky.cpp +++ b/indra/newview/llfloatereditsky.cpp @@ -151,8 +151,8 @@ void LLFloaterEditSky::initCallbacks(void)  	getChild<LLUICtrl>("WLBlueHorizon")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlMoved, this, _1, ¶m_mgr.mBlueHorizon));  	// haze density, horizon, mult, and altitude -	getChild<LLUICtrl>("WLHazeDensity")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlRMoved, this, _1, ¶m_mgr.mHazeDensity)); -	getChild<LLUICtrl>("WLHazeHorizon")->setCommitCallback(boost::bind(&LLFloaterEditSky::onColorControlRMoved, this, _1, ¶m_mgr.mHazeHorizon)); +	getChild<LLUICtrl>("WLHazeDensity")->setCommitCallback(boost::bind(&LLFloaterEditSky::onFloatControlMoved, this, _1, ¶m_mgr.mHazeDensity)); +	getChild<LLUICtrl>("WLHazeHorizon")->setCommitCallback(boost::bind(&LLFloaterEditSky::onFloatControlMoved, this, _1, ¶m_mgr.mHazeHorizon));  	getChild<LLUICtrl>("WLDensityMult")->setCommitCallback(boost::bind(&LLFloaterEditSky::onFloatControlMoved, this, _1, ¶m_mgr.mDensityMult));  	getChild<LLUICtrl>("WLMaxAltitude")->setCommitCallback(boost::bind(&LLFloaterEditSky::onFloatControlMoved, this, _1, ¶m_mgr.mMaxAlt)); @@ -220,15 +220,14 @@ void LLFloaterEditSky::syncControls()  	setColorSwatch("WLBlueHorizon", param_mgr->mBlueHorizon, WL_BLUE_HORIZON_DENSITY_SCALE);  	// haze density, horizon, mult, and altitude -	param_mgr->mHazeDensity = cur_params.getVector(param_mgr->mHazeDensity.mName, err); -	childSetValue("WLHazeDensity", param_mgr->mHazeDensity.r); -	param_mgr->mHazeHorizon = cur_params.getVector(param_mgr->mHazeHorizon.mName, err); -	childSetValue("WLHazeHorizon", param_mgr->mHazeHorizon.r); -	param_mgr->mDensityMult = cur_params.getVector(param_mgr->mDensityMult.mName, err); -	childSetValue("WLDensityMult", param_mgr->mDensityMult.x * -		param_mgr->mDensityMult.mult); -	param_mgr->mMaxAlt = cur_params.getVector(param_mgr->mMaxAlt.mName, err); -	childSetValue("WLMaxAltitude", param_mgr->mMaxAlt.x); +	param_mgr->mHazeDensity = cur_params.getFloat(param_mgr->mHazeDensity.mName, err); +	childSetValue("WLHazeDensity", (F32) param_mgr->mHazeDensity); +	param_mgr->mHazeHorizon = cur_params.getFloat(param_mgr->mHazeHorizon.mName, err); +	childSetValue("WLHazeHorizon", (F32) param_mgr->mHazeHorizon); +	param_mgr->mDensityMult = cur_params.getFloat(param_mgr->mDensityMult.mName, err); +	childSetValue("WLDensityMult", ((F32) param_mgr->mDensityMult) * param_mgr->mDensityMult.mult); +	param_mgr->mMaxAlt = cur_params.getFloat(param_mgr->mMaxAlt.mName, err); +	childSetValue("WLMaxAltitude", (F32) param_mgr->mMaxAlt);  	// blue density  	param_mgr->mBlueDensity = cur_params.getVector(param_mgr->mBlueDensity.mName, err); @@ -273,10 +272,10 @@ void LLFloaterEditSky::syncControls()  	childSetValue("WLCloudDetailDensity", param_mgr->mCloudDetail.b);  	// Cloud extras -	param_mgr->mCloudCoverage = cur_params.getVector(param_mgr->mCloudCoverage.mName, err); -	param_mgr->mCloudScale = cur_params.getVector(param_mgr->mCloudScale.mName, err); -	childSetValue("WLCloudCoverage", param_mgr->mCloudCoverage.x); -	childSetValue("WLCloudScale", param_mgr->mCloudScale.x); +	param_mgr->mCloudCoverage = cur_params.getFloat(param_mgr->mCloudCoverage.mName, err); +	param_mgr->mCloudScale = cur_params.getFloat(param_mgr->mCloudScale.mName, err); +	childSetValue("WLCloudCoverage", (F32) param_mgr->mCloudCoverage); +	childSetValue("WLCloudScale", (F32) param_mgr->mCloudScale);  	// cloud scrolling  	bool lockX = !param_mgr->mCurParams.getEnableCloudScrollX(); @@ -306,13 +305,13 @@ void LLFloaterEditSky::syncControls()  	childSetValue("WLCloudScrollX", param_mgr->mCurParams.getCloudScrollX() - 10.0f);  	childSetValue("WLCloudScrollY", param_mgr->mCurParams.getCloudScrollY() - 10.0f); -	param_mgr->mDistanceMult = cur_params.getVector(param_mgr->mDistanceMult.mName, err); -	childSetValue("WLDistanceMult", param_mgr->mDistanceMult.x); +	param_mgr->mDistanceMult = cur_params.getFloat(param_mgr->mDistanceMult.mName, err); +	childSetValue("WLDistanceMult", (F32) param_mgr->mDistanceMult);  	// Tweak extras -	param_mgr->mWLGamma = cur_params.getVector(param_mgr->mWLGamma.mName, err); -	childSetValue("WLGamma", param_mgr->mWLGamma.x); +	param_mgr->mWLGamma = cur_params.getFloat(param_mgr->mWLGamma.mName, err); +	childSetValue("WLGamma", (F32) param_mgr->mWLGamma);  	childSetValue("WLStarAlpha", param_mgr->mCurParams.getStarBrightness());  } diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index 9122e5a8f5..7448f2bb2a 100755 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -4525,7 +4525,17 @@ void LLModelPreview::updateStatusMessages()  		}  	} -	if (mFMP->childGetValue("physics_lod_combo").asString() == "From file") +	 +	LLCtrlSelectionInterface* iface = fmp->childGetSelectionInterface("physics_lod_combo"); +	S32 which_mode = 0;  +	S32 file_mode = 1; +	if (iface) +	{ +		which_mode = iface->getFirstSelectedIndex(); +		file_mode = iface->getItemCount() - 1; +	} + +	if (which_mode == file_mode)  	{  		mFMP->childEnable("physics_file");  		mFMP->childEnable("physics_browse"); diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index b02bf79a28..bd20210190 100755 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -728,7 +728,7 @@ bool LLMeshRepoThread::fetchMeshSkinInfo(const LLUUID& mesh_id)  			if (!http_url.empty())  			{				  				ret = mCurlRequest->getByteRange(http_url, headers, offset, size, -										   new LLMeshSkinInfoResponder(mesh_id, offset, size)); +												 new LLMeshSkinInfoResponder(mesh_id, offset, size));  				if(ret)  				{  					LLMeshRepository::sHTTPRequestCount++; @@ -805,7 +805,7 @@ bool LLMeshRepoThread::fetchMeshDecomposition(const LLUUID& mesh_id)  			if (!http_url.empty())  			{				  				ret = mCurlRequest->getByteRange(http_url, headers, offset, size, -										   new LLMeshDecompositionResponder(mesh_id, offset, size)); +												 new LLMeshDecompositionResponder(mesh_id, offset, size));  				if(ret)  				{  					LLMeshRepository::sHTTPRequestCount++; @@ -881,7 +881,7 @@ bool LLMeshRepoThread::fetchMeshPhysicsShape(const LLUUID& mesh_id)  			if (!http_url.empty())  			{				  				ret = mCurlRequest->getByteRange(http_url, headers, offset, size, -										   new LLMeshPhysicsShapeResponder(mesh_id, offset, size)); +												 new LLMeshPhysicsShapeResponder(mesh_id, offset, size));  				if(ret)  				{ @@ -1093,17 +1093,19 @@ bool LLMeshRepoThread::headerReceived(const LLVolumeParams& mesh_params, U8* dat  bool LLMeshRepoThread::lodReceived(const LLVolumeParams& mesh_params, S32 lod, U8* data, S32 data_size)  { -	LLVolume* volume = new LLVolume(mesh_params, LLVolumeLODGroup::getVolumeScaleFromDetail(lod)); +	LLPointer<LLVolume> volume = new LLVolume(mesh_params, LLVolumeLODGroup::getVolumeScaleFromDetail(lod));  	std::string mesh_string((char*) data, data_size);  	std::istringstream stream(mesh_string);  	if (volume->unpackVolumeFaces(stream, data_size))  	{ -		LoadedMesh mesh(volume, mesh_params, lod);  		if (volume->getNumFaces() > 0)  		{ -			LLMutexLock lock(mMutex); -			mLoadedQ.push(mesh); +			LoadedMesh mesh(volume, mesh_params, lod); +			{ +				LLMutexLock lock(mMutex); +				mLoadedQ.push(mesh); +			}  			return true;  		}  	} diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index cb40af7061..0adb187dd2 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -260,6 +260,9 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)  	gPipeline.disableLights(); +	//reset vertex buffers if needed +	gPipeline.doResetVertexBuffers(); +  	stop_glerror();  	// Don't draw if the window is hidden or minimized. diff --git a/indra/newview/llviewerjointmesh.cpp b/indra/newview/llviewerjointmesh.cpp index 76f4e18c27..e052e37393 100644 --- a/indra/newview/llviewerjointmesh.cpp +++ b/indra/newview/llviewerjointmesh.cpp @@ -63,7 +63,6 @@ extern PFNGLWEIGHTFVARBPROC glWeightfvARB;  extern PFNGLVERTEXBLENDARBPROC glVertexBlendARB;  #endif -static LLPointer<LLVertexBuffer> sRenderBuffer = NULL;  static const U32 sRenderMask = LLVertexBuffer::MAP_VERTEX |  							   LLVertexBuffer::MAP_NORMAL |  							   LLVertexBuffer::MAP_TEXCOORD0; diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index 5de363e03c..6db2138688 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -730,7 +730,7 @@ BOOL LLViewerShaderMgr::loadBasicShaders()  	vector< pair<string, S32> > shaders;  	shaders.push_back( make_pair( "windlight/atmosphericsVarsV.glsl",		mVertexShaderLevel[SHADER_WINDLIGHT] ) ); -	shaders.push_back( make_pair( "windlight/atmosphericsVarsWaterV.glsl",		mVertexShaderLevel[SHADER_WINDLIGHT] ) ); +	shaders.push_back( make_pair( "windlight/atmosphericsVarsWaterV.glsl",	mVertexShaderLevel[SHADER_WINDLIGHT] ) );  	shaders.push_back( make_pair( "windlight/atmosphericsHelpersV.glsl",	mVertexShaderLevel[SHADER_WINDLIGHT] ) );  	shaders.push_back( make_pair( "lighting/lightFuncV.glsl",				mVertexShaderLevel[SHADER_LIGHTING] ) );  	shaders.push_back( make_pair( "lighting/sumLightsV.glsl",				sum_lights_class ) ); @@ -1102,19 +1102,25 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  	if (success)  	{  		gDeferredSkinnedAlphaProgram.mName = "Deferred Skinned Alpha Shader"; +		gDeferredSkinnedAlphaProgram.mFeatures.atmosphericHelpers = true;  		gDeferredSkinnedAlphaProgram.mFeatures.hasObjectSkinning = true;  		gDeferredSkinnedAlphaProgram.mFeatures.calculatesAtmospherics = true;  		gDeferredSkinnedAlphaProgram.mFeatures.hasGamma = true;  		gDeferredSkinnedAlphaProgram.mFeatures.hasAtmospherics = true; -		gDeferredSkinnedAlphaProgram.mFeatures.calculatesLighting = true; -		gDeferredSkinnedAlphaProgram.mFeatures.hasLighting = true; +		gDeferredSkinnedAlphaProgram.mFeatures.calculatesLighting = false; +		gDeferredSkinnedAlphaProgram.mFeatures.hasLighting = false;  		gDeferredSkinnedAlphaProgram.mFeatures.isAlphaLighting = true;  		gDeferredSkinnedAlphaProgram.mFeatures.disableTextureIndex = true;  		gDeferredSkinnedAlphaProgram.mShaderFiles.clear();  		gDeferredSkinnedAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaSkinnedV.glsl", GL_VERTEX_SHADER_ARB));  		gDeferredSkinnedAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaNonIndexedF.glsl", GL_FRAGMENT_SHADER_ARB));  		gDeferredSkinnedAlphaProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; +		  		success = gDeferredSkinnedAlphaProgram.createShader(NULL, NULL); +		 +		// Hack to include uniforms for lighting without linking in lighting file +		gDeferredSkinnedAlphaProgram.mFeatures.calculatesLighting = true; +		gDeferredSkinnedAlphaProgram.mFeatures.hasLighting = true;  	}  	if (success) @@ -1231,11 +1237,12 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  	if (success)  	{  		gDeferredAlphaProgram.mName = "Deferred Alpha Shader"; -		gDeferredAlphaProgram.mFeatures.calculatesLighting = true; +		gDeferredAlphaProgram.mFeatures.atmosphericHelpers = true; +		gDeferredAlphaProgram.mFeatures.calculatesLighting = false;  		gDeferredAlphaProgram.mFeatures.calculatesAtmospherics = true;  		gDeferredAlphaProgram.mFeatures.hasGamma = true;  		gDeferredAlphaProgram.mFeatures.hasAtmospherics = true; -		gDeferredAlphaProgram.mFeatures.hasLighting = true; +		gDeferredAlphaProgram.mFeatures.hasLighting = false;  		gDeferredAlphaProgram.mFeatures.isAlphaLighting = true;  		gDeferredAlphaProgram.mFeatures.disableTextureIndex = true; //hack to disable auto-setup of texture channels  		if (mVertexShaderLevel[SHADER_DEFERRED] < 1) @@ -1251,7 +1258,12 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  		gDeferredAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaV.glsl", GL_VERTEX_SHADER_ARB));  		gDeferredAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaF.glsl", GL_FRAGMENT_SHADER_ARB));  		gDeferredAlphaProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; +  		success = gDeferredAlphaProgram.createShader(NULL, NULL); + +		// Hack +		gDeferredAlphaProgram.mFeatures.calculatesLighting = true; +		gDeferredAlphaProgram.mFeatures.hasLighting = true;  	}  	if (success) @@ -1394,19 +1406,24 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  	if (success)  	{  		gDeferredAvatarAlphaProgram.mName = "Avatar Alpha Shader"; +		gDeferredAvatarAlphaProgram.mFeatures.atmosphericHelpers = true;  		gDeferredAvatarAlphaProgram.mFeatures.hasSkinning = true; -		gDeferredAvatarAlphaProgram.mFeatures.calculatesLighting = true; +		gDeferredAvatarAlphaProgram.mFeatures.calculatesLighting = false;  		gDeferredAvatarAlphaProgram.mFeatures.calculatesAtmospherics = true;  		gDeferredAvatarAlphaProgram.mFeatures.hasGamma = true;  		gDeferredAvatarAlphaProgram.mFeatures.hasAtmospherics = true; -		gDeferredAvatarAlphaProgram.mFeatures.hasLighting = true; +		gDeferredAvatarAlphaProgram.mFeatures.hasLighting = false;  		gDeferredAvatarAlphaProgram.mFeatures.isAlphaLighting = true;  		gDeferredAvatarAlphaProgram.mFeatures.disableTextureIndex = true;  		gDeferredAvatarAlphaProgram.mShaderFiles.clear();  		gDeferredAvatarAlphaProgram.mShaderFiles.push_back(make_pair("deferred/avatarAlphaV.glsl", GL_VERTEX_SHADER_ARB));  		gDeferredAvatarAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaNonIndexedNoColorF.glsl", GL_FRAGMENT_SHADER_ARB));  		gDeferredAvatarAlphaProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; +  		success = gDeferredAvatarAlphaProgram.createShader(NULL, &mAvatarUniforms); + +		gDeferredAvatarAlphaProgram.mFeatures.calculatesLighting = true; +		gDeferredAvatarAlphaProgram.mFeatures.hasLighting = true;  	}  	if (success) diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 8a713ae22c..8a713ae22c 100644..100755 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp index e9db37821b..312034022e 100644 --- a/indra/newview/llvosky.cpp +++ b/indra/newview/llvosky.cpp @@ -342,7 +342,7 @@ LLVOSky::LLVOSky(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)  	blue_density = LLColor3();  	blue_horizon = LLColor3();  	haze_density = 0.f; -	haze_horizon = LLColor3(); +	haze_horizon = 1.f;  	density_multiplier = 0.f;  	max_y = 0.f;  	glow = LLColor3(); @@ -651,17 +651,17 @@ void LLVOSky::initAtmospherics(void)  	sunlight_color = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("sunlight_color", error));  	ambient = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("ambient", error));  	//lightnorm = LLWLParamManager::getInstance()->mCurParams.getVector("lightnorm", error); -	gamma = LLWLParamManager::getInstance()->mCurParams.getVector("gamma", error)[0]; +	gamma = LLWLParamManager::getInstance()->mCurParams.getFloat("gamma", error);  	blue_density = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("blue_density", error));  	blue_horizon = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("blue_horizon", error)); -	haze_density = LLWLParamManager::getInstance()->mCurParams.getVector("haze_density", error)[0]; -	haze_horizon = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("haze_horizon", error)); -	density_multiplier = LLWLParamManager::getInstance()->mCurParams.getVector("density_multiplier", error)[0]; -	max_y = LLWLParamManager::getInstance()->mCurParams.getVector("max_y", error)[0]; +	haze_density = LLWLParamManager::getInstance()->mCurParams.getFloat("haze_density", error); +	haze_horizon = LLWLParamManager::getInstance()->mCurParams.getFloat("haze_horizon", error); +	density_multiplier = LLWLParamManager::getInstance()->mCurParams.getFloat("density_multiplier", error); +	max_y = LLWLParamManager::getInstance()->mCurParams.getFloat("max_y", error);  	glow = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("glow", error)); -	cloud_shadow = LLWLParamManager::getInstance()->mCurParams.getVector("cloud_shadow", error)[0]; +	cloud_shadow = LLWLParamManager::getInstance()->mCurParams.getFloat("cloud_shadow", error);  	cloud_color = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("cloud_color", error)); -	cloud_scale = LLWLParamManager::getInstance()->mCurParams.getVector("cloud_scale", error)[0]; +	cloud_scale = LLWLParamManager::getInstance()->mCurParams.getFloat("cloud_scale", error);  	cloud_pos_density1 = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("cloud_pos_density1", error));  	cloud_pos_density2 = LLColor3(LLWLParamManager::getInstance()->mCurParams.getVector("cloud_pos_density2", error)); @@ -825,7 +825,7 @@ void LLVOSky::calcSkyColorWLVert(LLVector3 & Pn, LLColor3 & vary_HazeColor, LLCo  	// Haze color above cloud  	vary_HazeColor = (blue_horizon * blue_weight * (sunlight + ambient) -				+ componentMult(haze_horizon.mV[0] * haze_weight, sunlight * temp2.mV[0] + ambient) +				+ componentMult(haze_horizon * haze_weight, sunlight * temp2.mV[0] + ambient)  			 );	  	// Increase ambient when there are more clouds @@ -836,7 +836,7 @@ void LLVOSky::calcSkyColorWLVert(LLVector3 & Pn, LLColor3 & vary_HazeColor, LLCo  	// Haze color below cloud  	LLColor3 additiveColorBelowCloud = (blue_horizon * blue_weight * (sunlight + tmpAmbient) -				+ componentMult(haze_horizon.mV[0] * haze_weight, sunlight * temp2.mV[0] + tmpAmbient) +				+ componentMult(haze_horizon * haze_weight, sunlight * temp2.mV[0] + tmpAmbient)  			 );	  	// Final atmosphere additive @@ -1002,7 +1002,7 @@ void LLVOSky::calcAtmospherics(void)  		//haze color  		vary_HazeColor =  			(blue_horizon * blue_weight * (sunlight*(1.f - cloud_shadow) + tmpAmbient)	 -			+ componentMult(haze_horizon.mV[0] * haze_weight, sunlight*(1.f - cloud_shadow) * temp2.mV[0] + tmpAmbient) +			+ componentMult(haze_horizon * haze_weight, sunlight*(1.f - cloud_shadow) * temp2.mV[0] + tmpAmbient)  				 );	  		//brightness of surface both sunlight and ambient diff --git a/indra/newview/llvosky.h b/indra/newview/llvosky.h index d3a42583ea..6e6898d80a 100644 --- a/indra/newview/llvosky.h +++ b/indra/newview/llvosky.h @@ -410,7 +410,7 @@ public:  	LLColor3 blue_density;  	LLColor3 blue_horizon;  	F32 haze_density; -	LLColor3 haze_horizon; +	F32 haze_horizon;  	F32 density_multiplier;  	F32 max_y;  	LLColor3 glow; diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 7492a06784..6354230796 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -4939,6 +4939,11 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::  				fullbright = TRUE;  			} +			if (hud_group) +			{ //all hud attachments are fullbright +				fullbright = TRUE; +			} +  			const LLTextureEntry* te = facep->getTextureEntry();  			tex = facep->getTexture(); @@ -4964,7 +4969,6 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::  				}  			}  			else if (gPipeline.canUseVertexShaders() -				&& group->mSpatialPartition->mPartitionType != LLViewerRegion::PARTITION_HUD   				&& LLPipeline::sRenderBump   				&& te->getShiny())  			{ //shiny @@ -5029,9 +5033,12 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::  					}  				} -				//not sure why this is here -- shiny HUD attachments maybe?  -- davep 5/11/2010 -				if (!is_alpha && te->getShiny() && LLPipeline::sRenderBump) -				{ +				 +				if (!gPipeline.canUseVertexShaders() &&  +					!is_alpha &&  +					te->getShiny() &&  +					LLPipeline::sRenderBump) +				{ //shiny as an extra pass when shaders are disabled  					registerFace(group, facep, LLRenderPass::PASS_SHINY);  				}  			} diff --git a/indra/newview/llwlparammanager.cpp b/indra/newview/llwlparammanager.cpp index 55608a059f..49d9d44d74 100644 --- a/indra/newview/llwlparammanager.cpp +++ b/indra/newview/llwlparammanager.cpp @@ -64,7 +64,6 @@  LLWLParamManager::LLWLParamManager() :  	//set the defaults for the controls -	// index is from sWLUniforms in pipeline.cpp line 979  	/// Sun Delta Terrain tweak variables.  	mSunDeltaYaw(180.0f), @@ -72,10 +71,10 @@ LLWLParamManager::LLWLParamManager() :  	mWLGamma(1.0f, "gamma"),  	mBlueHorizon(0.25f, 0.25f, 1.0f, 1.0f, "blue_horizon", "WLBlueHorizon"), -	mHazeDensity(1.0f, 1.0f, 1.0f, 0.5f, "haze_density"), +	mHazeDensity(1.0f, "haze_density"),  	mBlueDensity(0.25f, 0.25f, 0.25f, 1.0f, "blue_density", "WLBlueDensity"),  	mDensityMult(1.0f, "density_multiplier", 1000), -	mHazeHorizon(1.0f, 1.0f, 1.0f, 0.5f, "haze_horizon"), +	mHazeHorizon(1.0f, "haze_horizon"),  	mMaxAlt(4000.0f, "max_y"),  	// Lighting diff --git a/indra/newview/llwlparammanager.h b/indra/newview/llwlparammanager.h index bc984b9126..72422500fc 100644 --- a/indra/newview/llwlparammanager.h +++ b/indra/newview/llwlparammanager.h @@ -102,9 +102,8 @@ struct WLFloatControl {  	{  	} -	inline WLFloatControl & operator = (LLVector4 const & val) { -		x = val.mV[0]; - +	inline WLFloatControl & operator = (F32 val) { +		x = val;  		return *this;  	} @@ -340,10 +339,10 @@ public:  	/// Atmospherics  	WLColorControl mBlueHorizon; -	WLColorControl mHazeDensity; +	WLFloatControl mHazeDensity;  	WLColorControl mBlueDensity;  	WLFloatControl mDensityMult; -	WLColorControl mHazeHorizon; +	WLFloatControl mHazeHorizon;  	WLFloatControl mMaxAlt;  	/// Lighting diff --git a/indra/newview/llwlparamset.cpp b/indra/newview/llwlparamset.cpp index 5bb7025031..1e95b3ea4a 100644 --- a/indra/newview/llwlparamset.cpp +++ b/indra/newview/llwlparamset.cpp @@ -41,33 +41,7 @@  LLWLParamSet::LLWLParamSet(void) :  	mName("Unnamed Preset"),  	mCloudScrollXOffset(0.f), mCloudScrollYOffset(0.f)	 -{ -/* REMOVE or init the LLSD -	const std::map<std::string, LLVector4>::value_type hardcodedPreset[] = { -		std::make_pair("lightnorm",				LLVector4(0.f, 0.707f, -0.707f, 0.f)), -		std::make_pair("sunlight_color",		LLVector4(0.6f, 0.6f, 2.83f, 2.27f)), -		std::make_pair("ambient",				LLVector4(0.27f, 0.33f, 0.44f, 1.19f)), -		std::make_pair("blue_horizon",			LLVector4(0.3f, 0.4f, 0.9f, 1.f)), -		std::make_pair("blue_density",			LLVector4(0.3f, 0.4f, 0.8f, 1.f)), -		std::make_pair("haze_horizon",			LLVector4(0.6f, 0.6f, 0.6f, 1.f)), -		std::make_pair("haze_density",			LLVector4(0.3f, 0.3f, 0.3f, 1.f)), -		std::make_pair("cloud_shadow",			LLVector4(0.f, 0.f, 0.f, 0.f)), -		std::make_pair("density_multiplier",	LLVector4(0.001f, 0.001f, 0.001f, 0.001f)), -		std::make_pair("distance_multiplier",	LLVector4(1.f, 1.f, 1.f, 1.f)), -		std::make_pair("max_y",					LLVector4(600.f, 600.f, 600.f, 0.f)), -		std::make_pair("glow",					LLVector4(15.f, 0.001f, -0.03125f, 0.f)), -		std::make_pair("cloud_color",			LLVector4(0.0f, 0.0f, 0.0f, 0.0f)), -		std::make_pair("cloud_pos_density1",	LLVector4(0.f, 0.f, 0.f, 1.f)), -		std::make_pair("cloud_pos_density2",	LLVector4(0.f, 0.f, 0.f, 1.f)), -		std::make_pair("cloud_scale",			LLVector4(0.42f, 0.f, 0.f, 1.f)), -		std::make_pair("gamma",					LLVector4(2.0f, 2.0f, 2.0f, 0.0f)), -	}; -	std::map<std::string, LLVector4>::value_type const * endHardcodedPreset =  -		hardcodedPreset + LL_ARRAY_SIZE(hardcodedPreset); - -	mParamValues.insert(hardcodedPreset, endHardcodedPreset); -*/ -} +{}  static LLFastTimer::DeclareTimer FTM_WL_PARAM_UPDATE("WL Param Update"); @@ -79,55 +53,78 @@ void LLWLParamSet::update(LLGLSLShader * shader) const  		i != mParamValues.endMap();  		++i)  	{ -		 -  		const std::string& param = i->first; -		if(	param == "star_brightness" || param == "preset_num" || param == "sun_angle" || +		if (param == "star_brightness" || param == "preset_num" || param == "sun_angle" ||  			param == "east_angle" || param == "enable_cloud_scroll" ||  			param == "cloud_scroll_rate" || param == "lightnorm" )   		{  			continue;  		} -		if(param == "cloud_pos_density1")  +		if (param == "cloud_pos_density1")  		{  			LLVector4 val;  			val.mV[0] = F32(i->second[0].asReal()) + mCloudScrollXOffset;  			val.mV[1] = F32(i->second[1].asReal()) + mCloudScrollYOffset;  			val.mV[2] = (F32) i->second[2].asReal();  			val.mV[3] = (F32) i->second[3].asReal(); +  			stop_glerror();  			shader->uniform4fv(param, 1, val.mV);  			stop_glerror(); -		}  +		} +		else if (param == "cloud_scale" || param == "cloud_shadow" || +				 param == "density_multiplier" || +				 param == "haze_density" || param == "haze_horizon" || +				 param == "max_y") +		{ +			F32 val = (F32) i->second[0].asReal(); + +			stop_glerror(); +			shader->uniform1f(param, val); +			stop_glerror(); +		}  		else // param is the uniform name  		{ -			LLVector4 val; -			  			// handle all the different cases -			if(i->second.isArray() && i->second.size() == 4)  +			if (i->second.isArray() && i->second.size() == 4)  			{ +				LLVector4 val; +  				val.mV[0] = (F32) i->second[0].asReal();  				val.mV[1] = (F32) i->second[1].asReal();  				val.mV[2] = (F32) i->second[2].asReal();  				val.mV[3] = (F32) i->second[3].asReal();															 + +				stop_glerror(); +				shader->uniform4fv(param, 1, val.mV); +				stop_glerror();  			}  -			else if(i->second.isReal())  +			else if (i->second.isReal())  			{ -				val.mV[0] = (F32) i->second.asReal(); +				F32 val = (F32) i->second.asReal(); + +				stop_glerror(); +				shader->uniform1f(param, val); +				stop_glerror();  			}  -			else if(i->second.isInteger())  +			else if (i->second.isInteger())  			{ -				val.mV[0] = (F32) i->second.asReal(); +				S32 val = (S32) i->second.asInteger(); + +				stop_glerror(); +				shader->uniform1i(param, val); +				stop_glerror();  			}  -			else if(i->second.isBoolean()) +			else if (i->second.isBoolean())  			{ -				val.mV[0] = i->second.asBoolean(); +				S32 val = (i->second.asBoolean() ? 1 : 0); + +				stop_glerror(); +				shader->uniform1i(param, val); +				stop_glerror();  			} -			stop_glerror(); -			shader->uniform4fv(param, 1, val.mV); -			stop_glerror();  		}  	}  } @@ -148,7 +145,8 @@ void LLWLParamSet::set(const std::string& paramName, float x)  	}  } -void LLWLParamSet::set(const std::string& paramName, float x, float y) { +void LLWLParamSet::set(const std::string& paramName, float x, float y) +{  	mParamValues[paramName][0] = x;  	mParamValues[paramName][1] = y;  } @@ -194,7 +192,6 @@ void LLWLParamSet::set(const std::string& paramName, const LLColor4 & val)  LLVector4 LLWLParamSet::getVector(const std::string& paramName, bool& error)   { -	  	// test to see if right type  	LLSD cur_val = mParamValues.get(paramName);  	if (!cur_val.isArray())  @@ -215,7 +212,6 @@ LLVector4 LLWLParamSet::getVector(const std::string& paramName, bool& error)  F32 LLWLParamSet::getFloat(const std::string& paramName, bool& error)   { -	  	// test to see if right type  	LLSD cur_val = mParamValues.get(paramName);  	if (cur_val.isArray() && cur_val.size() != 0)  @@ -234,8 +230,6 @@ F32 LLWLParamSet::getFloat(const std::string& paramName, bool& error)  	return 0;  } - -  void LLWLParamSet::setSunAngle(float val)   {  	// keep range 0 - 2pi @@ -263,7 +257,6 @@ void LLWLParamSet::setEastAngle(float val)  	mParamValues["east_angle"] = val;  } -  void LLWLParamSet::mix(LLWLParamSet& src, LLWLParamSet& dest, F32 weight)  {  	// set up the iterators @@ -282,7 +275,6 @@ void LLWLParamSet::mix(LLWLParamSet& src, LLWLParamSet& dest, F32 weight)  	// Iterate through values  	for(LLSD::map_iterator iter = mParamValues.beginMap(); iter != mParamValues.endMap(); ++iter)  	{ -  		// If param exists in both src and dest, set the holder variables, otherwise skip  		if(src.mParamValues.has(iter->first) && dest.mParamValues.has(iter->first))  		{ diff --git a/indra/newview/llwlparamset.h b/indra/newview/llwlparamset.h index 3c44ed3bb8..b087119dd5 100644 --- a/indra/newview/llwlparamset.h +++ b/indra/newview/llwlparamset.h @@ -110,7 +110,7 @@ public:  	/// \param error		A flag to set if it's not the proper return type  	LLVector4 getVector(const std::string& paramName, bool& error); -	/// Get an integer parameter +	/// Get a float parameter  	/// \param paramName	The name of the parameter to set.  	/// \param error		A flag to set if it's not the proper return type	  	F32 getFloat(const std::string& paramName, bool& error); diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index c523a78b22..a64655960f 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -203,10 +203,6 @@ extern S32 gBoxFrame;  extern BOOL gDisplaySwapBuffers;  extern BOOL gDebugGL; -// hack counter for rendering a fixed number of frames after toggling -// fullscreen to work around DEV-5361 -static S32 sDelayedVBOEnable = 0; -  BOOL	gAvatarBacklight = FALSE;  BOOL	gDebugPipeline = FALSE; @@ -411,6 +407,7 @@ LLPipeline::LLPipeline() :  	mOldRenderDebugMask(0),  	mGroupQ1Locked(false),  	mGroupQ2Locked(false), +	mResetVertexBuffers(false),  	mLastRebuildPool(NULL),  	mAlphaPool(NULL),  	mSkyPool(NULL), @@ -692,8 +689,6 @@ void LLPipeline::destroyGL()  	if (LLVertexBuffer::sEnableVBOs)  	{ -		// render 30 frames after switching to work around DEV-5361 -		sDelayedVBOEnable = 30;  		LLVertexBuffer::sEnableVBOs = FALSE;  	}  } @@ -2523,15 +2518,6 @@ void LLPipeline::updateGeom(F32 max_dtime)  	assertInitialized(); -	if (sDelayedVBOEnable > 0) -	{ -		if (--sDelayedVBOEnable <= 0) -		{ -			resetVertexBuffers(); -			LLVertexBuffer::sEnableVBOs = TRUE; -		} -	} -  	// notify various object types to reset internal cost metrics, etc.  	// for now, only LLVOVolume does this to throttle LOD changes  	LLVOVolume::preUpdateGeom(); @@ -6185,7 +6171,7 @@ LLSpatialPartition* LLPipeline::getSpatialPartition(LLViewerObject* vobj)  void LLPipeline::resetVertexBuffers(LLDrawable* drawable)  { -	if (!drawable || drawable->isDead()) +	if (!drawable)  	{  		return;  	} @@ -6198,7 +6184,19 @@ void LLPipeline::resetVertexBuffers(LLDrawable* drawable)  }  void LLPipeline::resetVertexBuffers() -{	 +{ +	mResetVertexBuffers = true; +} + +void LLPipeline::doResetVertexBuffers() +{ +	if (!mResetVertexBuffers) +	{ +		return; +	} +	 +	mResetVertexBuffers = false; +  	for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();   			iter != LLWorld::getInstance()->getRegionList().end(); ++iter)  	{ @@ -6224,11 +6222,9 @@ void LLPipeline::resetVertexBuffers()  	if (LLVertexBuffer::sGLCount > 0)  	{ -		llwarns << "VBO wipe failed." << llendl; +		llwarns << "VBO wipe failed -- " << LLVertexBuffer::sGLCount << " buffers remaining." << llendl;  	} -	llassert(LLVertexBuffer::sGLCount == 0); -  	LLVertexBuffer::unbind();	  	sRenderBump = gSavedSettings.getBOOL("RenderObjectBump"); diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index 9c78048c46..3c4e389ce0 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -111,6 +111,7 @@ public:  	void destroyGL();  	void restoreGL();  	void resetVertexBuffers(); +	void doResetVertexBuffers();  	void resizeScreenTexture();  	void releaseGLBuffers();  	void releaseScreenBuffers(); @@ -653,6 +654,8 @@ protected:  	bool mGroupQ2Locked;  	bool mGroupQ1Locked; +	bool mResetVertexBuffers; //if true, clear vertex buffers on next update +  	LLViewerObject::vobj_list_t		mCreateQ;  	LLDrawable::drawable_set_t		mRetexturedList; diff --git a/indra/newview/skins/default/textures/checker.png b/indra/newview/skins/default/textures/checker.pngBinary files differ new file mode 100644 index 0000000000..1ab87e3f02 --- /dev/null +++ b/indra/newview/skins/default/textures/checker.png diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index e4a8622a4b..eabcc68916 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -122,6 +122,8 @@ with the same filename but different name    <texture name="Checkbox_Press" file_name="widgets/Checkbox_Press.png" preload="true" />    <texture name="Check_Mark" file_name="icons/check_mark.png" preload="true" /> +  <texture name="Checker" file_name="checker.png" preload="false" /> +      <texture name="Command_AboutLand_Icon"    file_name="toolbar_icons/land.png"         preload="true" />    <texture name="Command_Appearance_Icon"   file_name="toolbar_icons/appearance.png"   preload="true" />    <texture name="Command_Avatar_Icon"       file_name="toolbar_icons/avatars.png"      preload="true" /> | 
