diff options
Diffstat (limited to 'indra/newview')
11 files changed, 384 insertions, 222 deletions
| diff --git a/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl b/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl index b7036e02cf..a132220bef 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl @@ -1,24 +1,24 @@ -/** +/**    * @file WLCloudsV.glsl   *   * $LicenseInfo:firstyear=2005&license=viewerlgpl$   * Second Life Viewer Source Code   * Copyright (C) 2005, 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$   */ @@ -33,26 +33,26 @@ ATTRIBUTE vec2 texcoord0;  ///////////////////////////////////////////////////////////////////////////////  // Output parameters -VARYING vec4  vary_CloudColorSun; -VARYING vec4  vary_CloudColorAmbient; +VARYING vec4 vary_CloudColorSun; +VARYING vec4 vary_CloudColorAmbient;  VARYING float vary_CloudDensity; -VARYING vec2  vary_texcoord0; -VARYING vec2  vary_texcoord1; -VARYING vec2  vary_texcoord2; -VARYING vec2  vary_texcoord3; +VARYING vec2 vary_texcoord0; +VARYING vec2 vary_texcoord1; +VARYING vec2 vary_texcoord2; +VARYING vec2 vary_texcoord3;  VARYING float altitude_blend_factor;  // Inputs  uniform vec3 camPosLocal; -uniform vec4  lightnorm; -uniform vec4  sunlight_color; -uniform vec4  moonlight_color; -uniform int   sun_up_factor; -uniform vec4  ambient_color; -uniform vec4  blue_horizon; -uniform vec4  blue_density; +uniform vec4 lightnorm; +uniform vec4 sunlight_color; +uniform vec4 moonlight_color; +uniform int sun_up_factor; +uniform vec4 ambient_color; +uniform vec4 blue_horizon; +uniform vec4 blue_density;  uniform float haze_horizon;  uniform float haze_density; @@ -60,7 +60,7 @@ uniform float cloud_shadow;  uniform float density_multiplier;  uniform float max_y; -uniform vec4  glow; +uniform vec4 glow;  uniform float sun_moon_glow_factor;  uniform vec4 cloud_color; @@ -75,53 +75,53 @@ uniform float cloud_scale;  //       indra\newview\llsettingsvo.cpp  void main()  { -    // World / view / projection -    gl_Position = modelview_projection_matrix * vec4(position.xyz, 1.0); +	// World / view / projection +	gl_Position = modelview_projection_matrix * vec4(position.xyz, 1.0); -    // Texture coords +	// Texture coords      // SL-13084 EEP added support for custom cloud textures -- flip them horizontally to match the preview of Clouds > Cloud Scroll      vary_texcoord0 = vec2(-texcoord0.x, texcoord0.y);  // See: LLSettingsVOSky::applySpecial -    vary_texcoord0.xy -= 0.5; -    vary_texcoord0.xy /= cloud_scale; -    vary_texcoord0.xy += 0.5; +	vary_texcoord0.xy -= 0.5; +	vary_texcoord0.xy /= cloud_scale; +	vary_texcoord0.xy += 0.5; -    vary_texcoord1 = vary_texcoord0; -    vary_texcoord1.x += lightnorm.x * 0.0125; -    vary_texcoord1.y += lightnorm.z * 0.0125; +	vary_texcoord1 = vary_texcoord0; +	vary_texcoord1.x += lightnorm.x * 0.0125; +	vary_texcoord1.y += lightnorm.z * 0.0125; -    vary_texcoord2 = vary_texcoord0 * 16.; -    vary_texcoord3 = vary_texcoord1 * 16.; +	vary_texcoord2 = vary_texcoord0 * 16.; +	vary_texcoord3 = vary_texcoord1 * 16.; -    // Get relative position +	// Get relative position      vec3 rel_pos = position.xyz - camPosLocal.xyz + vec3(0, 50, 0);      altitude_blend_factor = clamp((rel_pos.y + 512.0) / max_y, 0.0, 1.0); -    // Set altitude +	// Set altitude      if (rel_pos.y > 0) -    { +	{          rel_pos *= (max_y / rel_pos.y); -    } +	}      if (rel_pos.y < 0) -    { -        altitude_blend_factor = 0;  // SL-11589 Fix clouds drooping below horizon +	{ +		altitude_blend_factor = 0; // SL-11589 Fix clouds drooping below horizon          rel_pos *= (-32000. / rel_pos.y); -    } +	} -    // Can normalize then +	// Can normalize then      vec3  rel_pos_norm = normalize(rel_pos);      float rel_pos_len  = length(rel_pos); -    // Initialize temp variables -    vec4 sunlight = sunlight_color; -    vec4 light_atten; +	// Initialize temp variables +	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 +	// Sunlight attenuation effect (hue and brightness) due to atmosphere +	// this is used later for sunlight modulation at various altitudes      light_atten = (blue_density + vec4(haze_density * 0.25)) * (density_multiplier * max_y); -    // Calculate relative weights +	// Calculate relative weights      vec4 combined_haze = abs(blue_density) + vec4(abs(haze_density));      vec4 blue_weight   = blue_density / combined_haze;      vec4 haze_weight   = haze_density / combined_haze; @@ -130,63 +130,63 @@ void main()      float off_axis = 1.0 / max(1e-6, max(0., rel_pos_norm.y) + lightnorm.y);      sunlight *= exp(-light_atten * off_axis); -    // Distance +	// Distance      float density_dist = rel_pos_len * density_multiplier;      // Transparency (-> combined_haze)      // ATI Bugfix -- can't store combined_haze*density_dist in a variable because the ati -    // compiler gets confused. +	// compiler gets confused.      combined_haze = exp(-combined_haze * density_dist); -    // Compute haze glow +	// Compute haze glow      float haze_glow = 1.0 - dot(rel_pos_norm, lightnorm.xyz);      // haze_glow is 0 at the sun and increases away from sun      haze_glow = max(haze_glow, .001); -    // Set a minimum "angle" (smaller glow.y allows tighter, brighter hotspot) +		// Set a minimum "angle" (smaller glow.y allows tighter, brighter hotspot)      haze_glow *= glow.x; -    // Higher glow.x gives dimmer glow (because next step is 1 / "angle") +		// Higher glow.x gives dimmer glow (because next step is 1 / "angle")      haze_glow = pow(haze_glow, glow.z); -    // glow.z should be negative, so we're doing a sort of (1 / "angle") function +		// glow.z should be negative, so we're doing a sort of (1 / "angle") function      haze_glow *= sun_moon_glow_factor; -    // Add "minimum anti-solar illumination" +	// Add "minimum anti-solar illumination"      // For sun, add to glow.  For moon, remove glow entirely. SL-13768      haze_glow = (sun_moon_glow_factor < 1.0) ? 0.0 : (haze_glow + 0.25); -    // Increase ambient when there are more clouds -    vec4 tmpAmbient = ambient_color; -    tmpAmbient += (1. - tmpAmbient) * cloud_shadow * 0.5; +	// Increase ambient when there are more clouds +	vec4 tmpAmbient = ambient_color; +	tmpAmbient += (1. - tmpAmbient) * cloud_shadow * 0.5;  -    // Dim sunlight by cloud shadow percentage -    sunlight *= (1. - cloud_shadow); +	// Dim sunlight by cloud shadow percentage +	sunlight *= (1. - cloud_shadow); -    // Haze color below cloud +	// Haze color below cloud      vec4 additiveColorBelowCloud =          (blue_horizon * blue_weight * (sunlight + tmpAmbient) + (haze_horizon * haze_weight) * (sunlight * haze_glow + tmpAmbient)); -    // CLOUDS +	// CLOUDS      off_axis = 1.0 / max(1e-6, lightnorm.y * 2.);      sunlight *= exp(-light_atten * off_axis); -    // Cloud color out +	// Cloud color out      vary_CloudColorSun     = (sunlight * haze_glow) * cloud_color; -    vary_CloudColorAmbient = tmpAmbient * cloud_color; - -    // Attenuate cloud color by atmosphere +	vary_CloudColorAmbient = tmpAmbient * cloud_color; +	 +	// Attenuate cloud color by atmosphere      combined_haze = sqrt(combined_haze);  // less atmos opacity (more transparency) below clouds      vary_CloudColorSun *= combined_haze;      vary_CloudColorAmbient *= combined_haze;      vec4 oHazeColorBelowCloud = additiveColorBelowCloud * (1. - combined_haze); -    // Make a nice cloud density based on the cloud_shadow value that was passed in. -    vary_CloudDensity = 2. * (cloud_shadow - 0.25); +	// Make a nice cloud density based on the cloud_shadow value that was passed in. +	vary_CloudDensity = 2. * (cloud_shadow - 0.25); -    // Combine these to minimize register use -    vary_CloudColorAmbient += oHazeColorBelowCloud; +	// Combine these to minimize register use +	vary_CloudColorAmbient += oHazeColorBelowCloud; -    // needs this to compile on mac -    // vary_AtmosAttenuation = vec3(0.0,0.0,0.0); +	// needs this to compile on mac +	//vary_AtmosAttenuation = vec3(0.0,0.0,0.0); -    // END CLOUDS +	// END CLOUDS  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightShinyF.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightShinyF.glsl index 6b36d00f97..9fcee04c32 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightShinyF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightShinyF.glsl @@ -64,28 +64,27 @@ void main()  #else  	vec4 color = texture2D(diffuseMap, vary_texcoord0.xy);  #endif - +	  	color.rgb *= vertex_color.rgb;  	// SL-9632 HUDs are affected by Atmosphere  	if (no_atmo == 0)  	{ -		vec3 sunlit; -		vec3 amblit; -		vec3 additive; -		vec3 atten; +	vec3 sunlit; +	vec3 amblit; +	vec3 additive; +	vec3 atten;  		vec3 pos = vary_position.xyz/vary_position.w; -		calcAtmosphericVars(pos.xyz, vec3(0), 1.0, sunlit, amblit, additive, atten, false); - -		vec3 envColor = textureCube(environmentMap, vary_texcoord1.xyz).rgb; -		float env_intensity = vertex_color.a; +	calcAtmosphericVars(pos.xyz, vec3(0), 1.0, sunlit, amblit, additive, atten, false); +	 +	vec3 envColor = textureCube(environmentMap, vary_texcoord1.xyz).rgb;	 +	float env_intensity = vertex_color.a;  	//color.rgb = srgb_to_linear(color.rgb);  		color.rgb = mix(color.rgb, envColor.rgb, env_intensity); - -		color.rgb = fullbrightAtmosTransportFrag(color.rgb, additive, atten); -		color.rgb = fullbrightScaleSoftClip(color.rgb); +	color.rgb = fullbrightAtmosTransportFrag(color.rgb, additive, atten); +	color.rgb = fullbrightScaleSoftClip(color.rgb);  	}  /* diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl index 6f7e777d23..5e966293c6 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl @@ -48,15 +48,15 @@ void fullbright_shiny_lighting()  {  	vec4 color = diffuseLookup(vary_texcoord0.xy);  	color.rgb *= vertex_color.rgb; - +	  	// SL-9632 HUDs are affected by Atmosphere  	if (no_atmo == 0)  	{ -		vec3 envColor = textureCube(environmentMap, vary_texcoord1.xyz).rgb; -		color.rgb = mix(color.rgb, envColor.rgb, vertex_color.a*0.75); // MAGIC NUMBER SL-12574; ALM: Off, Quality > Low +	vec3 envColor = textureCube(environmentMap, vary_texcoord1.xyz).rgb;	 +	color.rgb = mix(color.rgb, envColor.rgb, vertex_color.a*0.75); // MAGIC NUMBER SL-12574; ALM: Off, Quality > Low -		color.rgb = fullbrightShinyAtmosTransport(color.rgb); -		color.rgb = fullbrightScaleSoftClip(color.rgb); +	color.rgb = fullbrightShinyAtmosTransport(color.rgb); +	color.rgb = fullbrightScaleSoftClip(color.rgb);  	}  /*  	// NOTE: HUD objects will be full bright. Uncomment if you want "some" environment lighting effecting these HUD objects. diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl index a0699affbf..3b4d358cfa 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl @@ -1,30 +1,37 @@ -/**  +/**   * @file class1\windlight\atmosphericVarsF.glsl   *   * $LicenseInfo:firstyear=2007&license=viewerlgpl$   * Second Life Viewer Source Code   * Copyright (C) 2007, 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$   */ -  -vec3 getPositionEye() -{ -	return vec3(0,0,0); -} +VARYING vec3 vary_AdditiveColor; +VARYING vec3 vary_AtmosAttenuation; + +vec3 getAmblitColor() { return vec3(0, 0, 0); } + +vec3 getAdditiveColor() { return vary_AdditiveColor; } + +vec3 getAtmosAttenuation() { return vec3(vary_AtmosAttenuation); } + +vec3 getSunlitColor() { return vec3(0, 0, 0); } + +vec3 getPositionEye() { return vec3(0, 0, 0); } diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl index bd1d150fc8..1fea2c3628 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl @@ -1,36 +1,56 @@ -/**  +/**   * @file class1\windlight\atmosphericVarsV.glsl   *   * $LicenseInfo:firstyear=2007&license=viewerlgpl$   * Second Life Viewer Source Code   * Copyright (C) 2007, 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$   */ -  +VARYING vec3 vary_AdditiveColor; +VARYING vec3 vary_AtmosAttenuation; -vec3 getPositionEye() +vec3 additive_color; +vec3 atmos_attenuation; +vec3 sunlit_color; +vec3 amblit_color; +vec3 position_eye; + +vec3 getSunlitColor() { return sunlit_color; } +void setSunlitColor(vec3 v) { sunlit_color = v; } + +vec3 getAdditiveColor() { return additive_color; } +void setAdditiveColor(vec3 v)  { -	return vec3(0,0,0); +    additive_color     = v; +    vary_AdditiveColor = v;  } -void setPositionEye(vec3 v) +vec3 getAmblitColor() { return amblit_color; } +void setAmblitColor(vec3 v) { amblit_color = v; } + +vec3 getAtmosAttenuation() { return atmos_attenuation; } +void setAtmosAttenuation(vec3 v)  { -	 +    atmos_attenuation     = v; +    vary_AtmosAttenuation = v;  } + +vec3 getPositionEye() { return position_eye; } +void setPositionEye(vec3 v) { position_eye = v; } diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsWaterF.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsWaterF.glsl index 5dc086ab1e..f83434b7ec 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsWaterF.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsWaterF.glsl @@ -1,33 +1,38 @@ -/**  +/**   * @file class1\windlight\atmosphericVarsWaterF.glsl   *   * $LicenseInfo:firstyear=2007&license=viewerlgpl$   * Second Life Viewer Source Code   * Copyright (C) 2007, 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$   */ -   VARYING vec3 vary_PositionEye; +VARYING vec3 vary_AdditiveColor; +VARYING vec3 vary_AtmosAttenuation; + +vec3 getSunlitColor() { return vec3(0, 0, 0); } + +vec3 getAmblitColor() { return vec3(0, 0, 0); } + +vec3 getAdditiveColor() { return vary_AdditiveColor; } -vec3 getPositionEye() -{ -	return vary_PositionEye; -} +vec3 getAtmosAttenuation() { return vary_AtmosAttenuation; } +vec3 getPositionEye() { return vary_PositionEye; } diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsWaterV.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsWaterV.glsl index e59eca265a..65d1176777 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsWaterV.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsWaterV.glsl @@ -1,37 +1,51 @@ -/**  +/**   * @file class1\windlight\atmosphericVarsWaterV.glsl   *   * $LicenseInfo:firstyear=2007&license=viewerlgpl$   * Second Life Viewer Source Code   * Copyright (C) 2007, 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$   */ -  -  +  VARYING vec3 vary_PositionEye; +VARYING vec3 vary_AdditiveColor; +VARYING vec3 vary_AtmosAttenuation; -vec3 getPositionEye() -{ -	return vary_PositionEye; -} +vec3 atmos_attenuation; +vec3 sunlit_color; +vec3 amblit_color; + +vec3 getSunlitColor() { return sunlit_color; } +void setSunlitColor(vec3 v) { sunlit_color = v; } + +vec3 getAmblitColor() { return amblit_color; } +void setAmblitColor(vec3 v) { amblit_color = v; } -void setPositionEye(vec3 v) +vec3 getAdditiveColor() { return vary_AdditiveColor; } +void setAdditiveColor(vec3 v) { vary_AdditiveColor = v; } + +vec3 getAtmosAttenuation() { return atmos_attenuation; } +void setAtmosAttenuation(vec3 v)  { -	vary_PositionEye = v; +    atmos_attenuation     = v; +    vary_AtmosAttenuation = v;  } + +vec3 getPositionEye() { return vary_PositionEye; } +void setPositionEye(vec3 v) { vary_PositionEye = v; } diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl index d758f85d71..07733bda18 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl @@ -1,5 +1,5 @@  /**  - * @file class2\wl\atmosphericVars.glsl + * @file class2\wl\atmosphericVarsF.glsl   *   * $LicenseInfo:firstyear=2007&license=viewerlgpl$   * Second Life Viewer Source Code diff --git a/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl b/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl index 1f881eb44b..b004cc7ddd 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl @@ -1,24 +1,24 @@ -/** +/**    * @file class2\wl\cloudsV.glsl   *   * $LicenseInfo:firstyear=2005&license=viewerlgpl$   * Second Life Viewer Source Code   * Copyright (C) 2005, 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$   */ @@ -33,26 +33,26 @@ ATTRIBUTE vec2 texcoord0;  ///////////////////////////////////////////////////////////////////////////////  // Output parameters -VARYING vec4  vary_CloudColorSun; -VARYING vec4  vary_CloudColorAmbient; +VARYING vec4 vary_CloudColorSun; +VARYING vec4 vary_CloudColorAmbient;  VARYING float vary_CloudDensity; -VARYING vec2  vary_texcoord0; -VARYING vec2  vary_texcoord1; -VARYING vec2  vary_texcoord2; -VARYING vec2  vary_texcoord3; +VARYING vec2 vary_texcoord0; +VARYING vec2 vary_texcoord1; +VARYING vec2 vary_texcoord2; +VARYING vec2 vary_texcoord3;  VARYING float altitude_blend_factor;  // Inputs  uniform vec3 camPosLocal; -uniform vec4  lightnorm; -uniform vec4  sunlight_color; -uniform vec4  moonlight_color; -uniform int   sun_up_factor; -uniform vec4  ambient_color; -uniform vec4  blue_horizon; -uniform vec4  blue_density; +uniform vec4 lightnorm; +uniform vec4 sunlight_color; +uniform vec4 moonlight_color; +uniform int sun_up_factor; +uniform vec4 ambient_color; +uniform vec4 blue_horizon; +uniform vec4 blue_density;  uniform float haze_horizon;  uniform float haze_density; @@ -60,7 +60,7 @@ uniform float cloud_shadow;  uniform float density_multiplier;  uniform float max_y; -uniform vec4  glow; +uniform vec4 glow;  uniform float sun_moon_glow_factor;  uniform vec4 cloud_color; @@ -75,8 +75,8 @@ uniform float cloud_scale;  //       indra\newview\llsettingsvo.cpp  void main()  { -    // World / view / projection -    gl_Position = modelview_projection_matrix * vec4(position.xyz, 1.0); +	// World / view / projection +	gl_Position = modelview_projection_matrix * vec4(position.xyz, 1.0);      // Texture coords      // SL-13084 EEP added support for custom cloud textures -- flip them horizontally to match the preview of Clouds > Cloud Scroll @@ -93,7 +93,7 @@ void main()      vary_texcoord2 = vary_texcoord0 * 16.;      vary_texcoord3 = vary_texcoord1 * 16.; -    // Get relative position +	// Get relative position      vec3 rel_pos = position.xyz - camPosLocal.xyz + vec3(0, 50, 0);      // fade clouds beyond a certain point so the bottom of the sky dome doesn't look silly at high altitude @@ -101,27 +101,27 @@ void main()      // Adj position vector to clamp altitude      if (rel_pos.y > 0.) -    { +	{          rel_pos *= (max_y / rel_pos.y); -    } +	}      if (rel_pos.y < 0.) -    { +	{          rel_pos *= (-32000. / rel_pos.y); -    } +	} -    // Can normalize then +	// Can normalize then      vec3  rel_pos_norm = normalize(rel_pos);      float rel_pos_len  = length(rel_pos); -    // Initialize temp variables -    vec4 sunlight = sunlight_color; -    vec4 light_atten; +	// Initialize temp variables +	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 +	// Sunlight attenuation effect (hue and brightness) due to atmosphere +	// this is used later for sunlight modulation at various altitudes      light_atten = (blue_density + vec4(haze_density * 0.25)) * (density_multiplier * max_y); -    // Calculate relative weights +	// Calculate relative weights      vec4 combined_haze = abs(blue_density) + vec4(abs(haze_density));      vec4 blue_weight   = blue_density / combined_haze;      vec4 haze_weight   = haze_density / combined_haze; @@ -130,63 +130,63 @@ void main()      float off_axis = 1.0 / max(1e-6, max(0., rel_pos_norm.y) + lightnorm.y);      sunlight *= exp(-light_atten * off_axis); -    // Distance +	// Distance      float density_dist = rel_pos_len * density_multiplier;      // Transparency (-> combined_haze)      // ATI Bugfix -- can't store combined_haze*density_dist in a variable because the ati -    // compiler gets confused. +	// compiler gets confused.      combined_haze = exp(-combined_haze * density_dist); -    // Compute haze glow +	// Compute haze glow      float haze_glow = 1.0 - dot(rel_pos_norm, lightnorm.xyz);      // haze_glow is 0 at the sun and increases away from sun      haze_glow = max(haze_glow, .001); -    // Set a minimum "angle" (smaller glow.y allows tighter, brighter hotspot) +		// Set a minimum "angle" (smaller glow.y allows tighter, brighter hotspot)      haze_glow *= glow.x; -    // Higher glow.x gives dimmer glow (because next step is 1 / "angle") +		// Higher glow.x gives dimmer glow (because next step is 1 / "angle")      haze_glow = pow(haze_glow, glow.z); -    // glow.z should be negative, so we're doing a sort of (1 / "angle") function +		// glow.z should be negative, so we're doing a sort of (1 / "angle") function      haze_glow *= sun_moon_glow_factor; -    // Add "minimum anti-solar illumination" +	// Add "minimum anti-solar illumination"      // For sun, add to glow.  For moon, remove glow entirely. SL-13768      haze_glow = (sun_moon_glow_factor < 1.0) ? 0.0 : (haze_glow + 0.25); -    // Increase ambient when there are more clouds -    vec4 tmpAmbient = ambient_color; -    tmpAmbient += (1. - tmpAmbient) * cloud_shadow * 0.5; +	// Increase ambient when there are more clouds +	vec4 tmpAmbient = ambient_color; +	tmpAmbient += (1. - tmpAmbient) * cloud_shadow * 0.5;  -    // Dim sunlight by cloud shadow percentage -    sunlight *= (1. - cloud_shadow); +	// Dim sunlight by cloud shadow percentage +	sunlight *= (1. - cloud_shadow); -    // Haze color below cloud +	// Haze color below cloud      vec4 additiveColorBelowCloud =          (blue_horizon * blue_weight * (sunlight + tmpAmbient) + (haze_horizon * haze_weight) * (sunlight * haze_glow + tmpAmbient)); -    // CLOUDS +	// CLOUDS      off_axis = 1.0 / max(1e-6, lightnorm.y * 2.);      sunlight *= exp(-light_atten * off_axis); -    // Cloud color out +	// Cloud color out      vary_CloudColorSun     = (sunlight * haze_glow) * cloud_color; -    vary_CloudColorAmbient = tmpAmbient * cloud_color; - -    // Attenuate cloud color by atmosphere +	vary_CloudColorAmbient = tmpAmbient * cloud_color; +	 +	// Attenuate cloud color by atmosphere      combined_haze = sqrt(combined_haze);  // less atmos opacity (more transparency) below clouds      vary_CloudColorSun *= combined_haze;      vary_CloudColorAmbient *= combined_haze;      vec4 oHazeColorBelowCloud = additiveColorBelowCloud * (1. - combined_haze); -    // Make a nice cloud density based on the cloud_shadow value that was passed in. -    vary_CloudDensity = 2. * (cloud_shadow - 0.25); +	// Make a nice cloud density based on the cloud_shadow value that was passed in. +	vary_CloudDensity = 2. * (cloud_shadow - 0.25); -    // Combine these to minimize register use -    vary_CloudColorAmbient += oHazeColorBelowCloud; +	// Combine these to minimize register use +	vary_CloudColorAmbient += oHazeColorBelowCloud; -    // needs this to compile on mac -    // vary_AtmosAttenuation = vec3(0.0,0.0,0.0); +	// needs this to compile on mac +	//vary_AtmosAttenuation = vec3(0.0,0.0,0.0); -    // END CLOUDS +	// END CLOUDS  } diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index bc44e37c5a..5016dc3e3e 100644 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -3646,6 +3646,7 @@ BOOL LLModelPreview::render()  	LLGLSUIDefault def; // GL_BLEND, GL_ALPHA_TEST, GL_CULL_FACE, depth test  	LLGLDisable no_blend(GL_BLEND); +	LLGLEnable cull(GL_CULL_FACE);  	LLGLDepthTest depth(GL_FALSE); // SL-12781 disable z-buffer to render background color  	LLGLDisable fog(GL_FOG); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 5b83cf7163..52dcb71c10 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -313,6 +313,99 @@ RecordToChatConsole::RecordToChatConsole():  ////////////////////////////////////////////////////////////////////////////  // +// Print Utility +// + +// Convert a normalized float (-1.0 <= x <= +1.0) to a fixed 1.4 format string: +// +//    s#.#### +// +// Where: +//    s  sign character; space if x is positiv, minus if negative +//    #  decimal digits +// +// This is similar to printf("%+.4f") except positive numbers are NOT cluttered with a leading '+' sign. +// NOTE: This does NOT null terminate the output +void normalized_float_to_string(const float x, char *out_str) +{ +    static const unsigned char DECIMAL_BCD2[] = +    { +        0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, +        0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, +        0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, +        0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, +        0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, +        0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, +        0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, +        0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, +        0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, +        0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99 +    }; + +    int neg = (x < 0); +    int rem = neg +            ? (int)(x * -10000.) +            : (int)(x *  10000.); + +    int d10 = rem % 100; rem /= 100; +    int d32 = rem % 100; rem /= 100; + +    out_str[6] = '0' + ((DECIMAL_BCD2[ d10 ] >> 0) & 0xF); +    out_str[5] = '0' + ((DECIMAL_BCD2[ d10 ] >> 4) & 0xF); +    out_str[4] = '0' + ((DECIMAL_BCD2[ d32 ] >> 0) & 0xF); +    out_str[3] = '0' + ((DECIMAL_BCD2[ d32 ] >> 4) & 0xF); +    out_str[2] = '.'; +    out_str[1] = '0' + (rem & 1); +    out_str[0] = " -"[neg]; // Could always show '+' for positive but this clutters up the common case +} + +// normalized float +//    printf("%-.4f    %-.4f    %-.4f") +// Params: +//   float  &matrix_row[4] +//   int    matrix_cell_index +//   string out_buffer (size 32) +// Note: The buffer is assumed to be pre-filled with spaces +#define MATRIX_ROW_N32_TO_STR(matrix_row, i, out_buffer)          \ +    normalized_float_to_string(matrix_row[i+0], out_buffer +  0); \ +    normalized_float_to_string(matrix_row[i+1], out_buffer + 11); \ +    normalized_float_to_string(matrix_row[i+2], out_buffer + 22); \ +    out_buffer[31] = 0; + + +// regular float +//    sprintf(buffer, "%-8.2f  %-8.2f  %-8.2f", matrix_row[i+0], matrix_row[i+1], matrix_row[i+2]); +// Params: +//   float  &matrix_row[4] +//   int    matrix_cell_index +//   char   out_buffer[32] +// Note: The buffer is assumed to be pre-filled with spaces +#define MATRIX_ROW_F32_TO_STR(matrix_row, i, out_buffer) {                       \ +    static const char *format[3] = {                                             \ +        "%-8.2f"  ,  /* 0 */                                                     \ +        ">  99K  ",  /* 1 */                                                     \ +        "< -99K  "   /* 2 */                                                     \ +    };                                                                           \ +                                                                                 \ +    F32 temp_0 = matrix_row[i+0];                                                \ +    F32 temp_1 = matrix_row[i+1];                                                \ +    F32 temp_2 = matrix_row[i+2];                                                \ +                                                                                 \ +    U8 flag_0 = (((U8)(temp_0 < -99999.99)) << 1) | ((U8)(temp_0 > 99999.99));   \ +    U8 flag_1 = (((U8)(temp_1 < -99999.99)) << 1) | ((U8)(temp_1 > 99999.99));   \ +    U8 flag_2 = (((U8)(temp_2 < -99999.99)) << 1) | ((U8)(temp_2 > 99999.99));   \ +                                                                                 \ +    if (temp_0 < 0.f) out_buffer[ 0] = '-';                                      \ +    if (temp_1 < 0.f) out_buffer[11] = '-';                                      \ +    if (temp_2 < 0.f) out_buffer[22] = '-';                                      \ +                                                                                 \ +    sprintf(out_buffer+ 1,format[flag_0],fabsf(temp_0)); out_buffer[ 1+8] = ' '; \ +    sprintf(out_buffer+12,format[flag_1],fabsf(temp_1)); out_buffer[12+8] = ' '; \ +    sprintf(out_buffer+23,format[flag_2],fabsf(temp_2)); out_buffer[23+8] =  0 ; \ +} + +//////////////////////////////////////////////////////////////////////////// +//  // LLDebugText  // @@ -333,7 +426,11 @@ private:  	typedef std::vector<Line> line_list_t;  	line_list_t mLineList;  	LLColor4 mTextColor; -	 + +	LLColor4 mBackColor; +	LLRect mBackRectCamera1; +	LLRect mBackRectCamera2; +  	void addText(S32 x, S32 y, const std::string &text)   	{  		mLineList.push_back(Line(text, x, y)); @@ -369,11 +466,22 @@ public:  		mTextColor = LLColor4( 0.86f, 0.86f, 0.86f, 1.f );  		// Draw stuff growing up from right lower corner of screen -		S32 xpos = mWindow->getWorldViewWidthScaled() - 400; +		S32 x_right = mWindow->getWorldViewWidthScaled(); +		S32 xpos = x_right - 400;  		xpos = llmax(xpos, 0);  		S32 ypos = 64;  		const S32 y_inc = 20; +		// Camera matrix text is hard to see again a white background +		// Add a dark background underneath the matrices for readability (contrast) +		mBackRectCamera1.mLeft   = xpos; +		mBackRectCamera1.mRight  = x_right; +		mBackRectCamera1.mTop    = -1; +		mBackRectCamera1.mBottom = -1; +		mBackRectCamera2 = mBackRectCamera1; + +		mBackColor = LLUIColorTable::instance().getColor( "MenuDefaultBgColor" ); +  		clearText();  		if (gSavedSettings.getBOOL("DebugShowTime")) @@ -709,48 +817,45 @@ public:  		}  		if (gSavedSettings.getBOOL("DebugShowRenderMatrices"))  		{ -			addText(xpos, ypos, llformat("%.4f    .%4f    %.4f    %.4f", gGLProjection[12], gGLProjection[13], gGLProjection[14], gGLProjection[15])); -			ypos += y_inc; +			char camera_lines[8][32]; +			memset(camera_lines, ' ', sizeof(camera_lines)); -			addText(xpos, ypos, llformat("%.4f    .%4f    %.4f    %.4f", gGLProjection[8], gGLProjection[9], gGLProjection[10], gGLProjection[11])); -			ypos += y_inc; - -			addText(xpos, ypos, llformat("%.4f    .%4f    %.4f    %.4f", gGLProjection[4], gGLProjection[5], gGLProjection[6], gGLProjection[7])); -			ypos += y_inc; - -			addText(xpos, ypos, llformat("%.4f    .%4f    %.4f    %.4f", gGLProjection[0], gGLProjection[1], gGLProjection[2], gGLProjection[3])); -			ypos += y_inc; +			// Projection last column is always <0,0,-1.0001,0> +			// Projection last row is always <0,0,-0.2> +			mBackRectCamera1.mBottom = ypos - y_inc + 2; +			MATRIX_ROW_N32_TO_STR(gGLProjection, 12,camera_lines[7]); addText(xpos, ypos, std::string(camera_lines[7])); ypos += y_inc; +			MATRIX_ROW_N32_TO_STR(gGLProjection,  8,camera_lines[6]); addText(xpos, ypos, std::string(camera_lines[6])); ypos += y_inc; +			MATRIX_ROW_N32_TO_STR(gGLProjection,  4,camera_lines[5]); addText(xpos, ypos, std::string(camera_lines[5])); ypos += y_inc; mBackRectCamera1.mTop    = ypos + 2; +			MATRIX_ROW_N32_TO_STR(gGLProjection,  0,camera_lines[4]); addText(xpos, ypos, std::string(camera_lines[4])); ypos += y_inc; mBackRectCamera2.mBottom = ypos + 2;  			addText(xpos, ypos, "Projection Matrix");  			ypos += y_inc; - -			addText(xpos, ypos, llformat("%.4f    .%4f    %.4f    %.4f", gGLModelView[12], gGLModelView[13], gGLModelView[14], gGLModelView[15])); -			ypos += y_inc; - -			addText(xpos, ypos, llformat("%.4f    .%4f    %.4f    %.4f", gGLModelView[8], gGLModelView[9], gGLModelView[10], gGLModelView[11])); -			ypos += y_inc; - -			addText(xpos, ypos, llformat("%.4f    .%4f    %.4f    %.4f", gGLModelView[4], gGLModelView[5], gGLModelView[6], gGLModelView[7])); -			ypos += y_inc; - -			addText(xpos, ypos, llformat("%.4f    .%4f    %.4f    %.4f", gGLModelView[0], gGLModelView[1], gGLModelView[2], gGLModelView[3])); -			ypos += y_inc; +			// View last column is always <0,0,0,1> +			MATRIX_ROW_F32_TO_STR(gGLModelView, 12,camera_lines[3]); addText(xpos, ypos, std::string(camera_lines[3])); ypos += y_inc; +			MATRIX_ROW_N32_TO_STR(gGLModelView,  8,camera_lines[2]); addText(xpos, ypos, std::string(camera_lines[2])); ypos += y_inc; +			MATRIX_ROW_N32_TO_STR(gGLModelView,  4,camera_lines[1]); addText(xpos, ypos, std::string(camera_lines[1])); ypos += y_inc; mBackRectCamera2.mTop = ypos + 2; +			MATRIX_ROW_N32_TO_STR(gGLModelView,  0,camera_lines[0]); addText(xpos, ypos, std::string(camera_lines[0])); ypos += y_inc;  			addText(xpos, ypos, "View Matrix");  			ypos += y_inc;  		}  		// disable use of glReadPixels which messes up nVidia nSight graphics debugging -		if (gSavedSettings.getBOOL("DebugShowColor") && !LLRender::sNsightDebugSupport) -		{ -			U8 color[4]; -			LLCoordGL coord = gViewerWindow->getCurrentMouse(); -			glReadPixels(coord.mX, coord.mY, 1,1,GL_RGBA, GL_UNSIGNED_BYTE, color); -			addText(xpos, ypos, llformat("%d %d %d %d", color[0], color[1], color[2], color[3])); -			ypos += y_inc; -		} +        if (gSavedSettings.getBOOL("DebugShowColor") && !LLRender::sNsightDebugSupport) +        { +            U8 color[4]; +            LLCoordGL coord = gViewerWindow->getCurrentMouse(); + +            // Convert x,y to raw pixel coords +            S32 x_raw = llround(coord.mX * gViewerWindow->getWindowWidthRaw() / (F32) gViewerWindow->getWindowWidthScaled()); +            S32 y_raw = llround(coord.mY * gViewerWindow->getWindowHeightRaw() / (F32) gViewerWindow->getWindowHeightScaled()); +             +            glReadPixels(x_raw, y_raw, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, color); +            addText(xpos, ypos, llformat("Pixel <%1d, %1d> R:%1d G:%1d B:%1d A:%1d", x_raw, y_raw, color[0], color[1], color[2], color[3])); +            ypos += y_inc; +        } -		// only display these messages if we are actually rendering beacons at this moment +        // only display these messages if we are actually rendering beacons at this moment  		if (LLPipeline::getRenderBeacons() && LLFloaterReg::instanceVisible("beacons"))  		{  			if (LLPipeline::getRenderMOAPBeacons()) @@ -877,6 +982,18 @@ public:  	void draw()  	{  		LL_RECORD_BLOCK_TIME(FTM_DISPLAY_DEBUG_TEXT); + +		// Camera matrix text is hard to see again a white background +		// Add a dark background underneath the matrices for readability (contrast) +		if (mBackRectCamera1.mTop >= 0) +		{ +			mBackColor.setAlpha( 0.75f ); +			gl_rect_2d(mBackRectCamera1, mBackColor, true); + +			mBackColor.setAlpha( 0.66f ); +			gl_rect_2d(mBackRectCamera2, mBackColor, true); +		} +  		for (line_list_t::iterator iter = mLineList.begin();  			 iter != mLineList.end(); ++iter)  		{ @@ -885,7 +1002,6 @@ public:  											 LLFontGL::LEFT, LLFontGL::TOP,  											 LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE);  		} -		mLineList.clear();  	}  }; | 
