diff options
| -rwxr-xr-x | indra/newview/app_settings/high_graphics.xml | 5 | ||||
| -rwxr-xr-x | indra/newview/app_settings/low_graphics.xml | 7 | ||||
| -rwxr-xr-x | indra/newview/app_settings/mid_graphics.xml | 5 | ||||
| -rwxr-xr-x | indra/newview/app_settings/settings.xml | 99 | ||||
| -rwxr-xr-x | indra/newview/app_settings/ultra_graphics.xml | 8 | ||||
| -rwxr-xr-x | indra/newview/featuretable.txt | 40 | ||||
| -rwxr-xr-x | indra/newview/featuretable_linux.txt | 16 | ||||
| -rwxr-xr-x | indra/newview/featuretable_mac.txt | 31 | ||||
| -rwxr-xr-x | indra/newview/featuretable_solaris.txt | 2 | ||||
| -rwxr-xr-x | indra/newview/featuretable_xp.txt | 24 | ||||
| -rwxr-xr-x | indra/newview/llappviewer.cpp | 3 | ||||
| -rwxr-xr-x | indra/newview/lldrawpoolavatar.cpp | 7 | ||||
| -rwxr-xr-x | indra/newview/llfeaturemanager.cpp | 4 | ||||
| -rwxr-xr-x | indra/newview/llfloaterpreference.cpp | 174 | ||||
| -rwxr-xr-x | indra/newview/llfloaterpreference.h | 19 | ||||
| -rwxr-xr-x | indra/newview/llviewercontrol.cpp | 14 | ||||
| -rwxr-xr-x | indra/newview/llvoavatar.cpp | 52 | ||||
| -rwxr-xr-x | indra/newview/llvoavatar.h | 8 | ||||
| -rwxr-xr-x | indra/newview/pipeline.cpp | 9 | ||||
| -rwxr-xr-x | indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml | 24 | 
20 files changed, 304 insertions, 247 deletions
diff --git a/indra/newview/app_settings/high_graphics.xml b/indra/newview/app_settings/high_graphics.xml index 37def19aaa..4e7c0fa914 100755 --- a/indra/newview/app_settings/high_graphics.xml +++ b/indra/newview/app_settings/high_graphics.xml @@ -27,9 +27,8 @@  	<!--Default for now-->  	<RenderTreeLODFactor value="0.5"/>  	<!--Avater Impostors and Visual Muting Limits--> -	<RenderUseImpostors value="TRUE"/> -    <RenderAvatarMaxVisible          value="20"/> -    <RenderAutoMuteRenderWeightLimit value="350000"/> +    <RenderAvatarMaxNonImpostors     value="20"/> +    <RenderAvatarMaxComplexity              value="350000"/>      <RenderAutoMuteSurfaceAreaLimit  value="300"/>  	<!--Default for now-->  	<RenderVolumeLODFactor value="1.125"/> diff --git a/indra/newview/app_settings/low_graphics.xml b/indra/newview/app_settings/low_graphics.xml index 683c2bd996..b98d681018 100755 --- a/indra/newview/app_settings/low_graphics.xml +++ b/indra/newview/app_settings/low_graphics.xml @@ -7,7 +7,7 @@  	<!--Default for now-->  	<RenderAvatarPhysicsLODFactor value="0.0"/>  	<!--Default for now--> -	<RenderAvatarMaxVisible value="3"/> +	<RenderAvatarMaxNonImpostors value="10"/>  	<!--NO SHADERS-->  	<RenderAvatarVP value="FALSE"/>  	<!--Short Range--> @@ -29,9 +29,8 @@  	<!--Default for now-->  	<RenderTreeLODFactor value="0.5"/>  	<!--Avater Impostors and Visual Muting Limits--> -	<RenderUseImpostors value="TRUE"/> -    <RenderAvatarMaxVisible          value="12"/> -    <RenderAutoMuteRenderWeightLimit value="75000"/> +    <RenderAvatarMaxNonImpostors     value="12"/> +    <RenderAvatarMaxComplexity              value="75000"/>      <RenderAutoMuteSurfaceAreaLimit  value="150"/>  	<!--Default for now-->  	<RenderVolumeLODFactor value="1.125"/> diff --git a/indra/newview/app_settings/mid_graphics.xml b/indra/newview/app_settings/mid_graphics.xml index f9b199c728..fad48f9683 100755 --- a/indra/newview/app_settings/mid_graphics.xml +++ b/indra/newview/app_settings/mid_graphics.xml @@ -27,9 +27,8 @@  	<!--Default for now-->  	<RenderTreeLODFactor value="0.5"/>  	<!--Avater Impostors and Visual Muting Limits--> -	<RenderUseImpostors value="TRUE"/> -    <RenderAvatarMaxVisible          value="18"/> -    <RenderAutoMuteRenderWeightLimit value="100000"/> +    <RenderAvatarMaxNonImpostors     value="18"/> +    <RenderAvatarMaxComplexity              value="100000"/>      <RenderAutoMuteSurfaceAreaLimit  value="200"/>  	<!--Default for now-->  	<RenderVolumeLODFactor value="1.125"/> diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 0c5126574f..de81f8f0ee 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -8287,15 +8287,13 @@      <key>RenderAvatarMaxVisible</key>      <map>        <key>Comment</key> -      <string>Maximum number of avatars to fully render at one time; -      over this limit uses impostor rendering (simplified rendering -      with less frequent updates)</string> +      <string>OBSOLETE and UNUSED. See RenderAvatarMaxNonImpostors</string>        <key>Persist</key> -      <integer>1</integer> +      <integer>0</integer>        <key>Type</key>        <string>S32</string>        <key>Value</key> -      <integer>12</integer> +      <integer>0</integer>      </map>      <key>RenderAvatarPhysicsLODFactor</key>      <map> @@ -9846,29 +9844,28 @@      <key>Value</key>      <integer>0</integer>    </map> -    <key>RenderUseFarClip</key> -    <map> -      <key>Comment</key> -      <string>If false, frustum culling will ignore far clip plane.</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map> -    <key>RenderUseImpostors</key> -    <map> -      <key>Comment</key> -      <string>Whether we want to use impostors for far away avatars.</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map> -   +  <key>RenderUseFarClip</key> +  <map> +    <key>Comment</key> +    <string>If false, frustum culling will ignore far clip plane.</string> +    <key>Persist</key> +    <integer>1</integer> +    <key>Type</key> +    <string>Boolean</string> +    <key>Value</key> +    <integer>1</integer> +  </map> +  <key>RenderUseImpostors</key> +  <map> +    <key>Comment</key> +    <string>OBSOLETE and UNUSED. See RenderAvatarMaxNonImpostors and RenderAvatarMaxComplexity.</string> +    <key>Persist</key> +    <integer>0</integer> +    <key>Type</key> +    <string>Boolean</string> +    <key>Value</key> +    <integer>0</integer> +  </map>    <key>RenderAutoMuteByteLimit</key>    <map>      <key>Comment</key> @@ -9880,10 +9877,35 @@      <key>Value</key>      <integer>10000000</integer>    </map> +  <key>RenderAvatarMaxNonImpostors</key> +  <map> +    <key>Comment</key> +    <string>Maximum number of avatars to fully render at one time; +    over this limit uses impostor rendering (simplified rendering +    with less frequent updates), reducing client lag.</string> +    <key>Persist</key> +    <integer>1</integer> +    <key>Type</key> +    <string>U32</string> +    <key>Value</key> +    <integer>12</integer> +  </map>    <key>RenderAutoMuteRenderWeightLimit</key>    <map>      <key>Comment</key> -    <string>Maximum render weight before an avatar is rendered as a simple impostor (0 to not use this limit).</string> +    <string>OBSOLETE. This setting has been renamed RenderAvatarMaxNonImpostors.</string> +    <key>Persist</key> +    <integer>0</integer> +    <key>Type</key> +    <string>U32</string> +    <key>Value</key> +    <integer>0</integer> +  </map> +  <key>RenderAvatarMaxComplexity</key> +  <map> +    <key>Comment</key> +    <string>Maximum Avatar Complexity; above this value, the avatar is +    rendered as a solid color outline (0 to disable this limit).</string>      <key>Persist</key>      <integer>1</integer>      <key>Type</key> @@ -15575,12 +15597,25 @@        <key>Value</key>        <string />      </map> -    <key>MaximumARC</key> +    <key>IndirectMaxComplexity</key>      <map>        <key>Comment</key> -      <string>Controls RenderAutoMuteRenderWeightLimit in a non-linear fashion</string> +      <string>Controls RenderAvatarMaxComplexity in a non-linear fashion (do +      not set this value)</string>        <key>Persist</key> -      <integer>1</integer> +      <integer>0</integer> +      <key>Type</key> +      <string>U32</string> +      <key>Value</key> +      <integer>0</integer> +    </map> +    <key>IndirectMaxNonImpostors</key> +    <map> +      <key>Comment</key> +      <string>Controls RenderAvatarMaxNonImpostors in a non-linear fashion (do +      not set this value)</string> +      <key>Persist</key> +      <integer>0</integer>        <key>Type</key>        <string>U32</string>        <key>Value</key> diff --git a/indra/newview/app_settings/ultra_graphics.xml b/indra/newview/app_settings/ultra_graphics.xml index dcf63eced5..270f91aeeb 100755 --- a/indra/newview/app_settings/ultra_graphics.xml +++ b/indra/newview/app_settings/ultra_graphics.xml @@ -26,10 +26,10 @@  	<RenderTerrainLODFactor value="2.0"/>  	<!--Default for now-->  	<RenderTreeLODFactor value="1.0"/> -	<!--Avater Impostors and Visual Muting Limits--> -	<RenderUseImpostors value="TRUE"/> -    <RenderAvatarMaxVisible          value="0"/> -    <RenderAutoMuteRenderWeightLimit value="0"/> +	<!--Avater Impostors and Visual Muting Limits (real defaults set +        based on default graphics setting --> +    <RenderAvatarMaxNonImpostors     value="0"/> +    <RenderAvatarMaxComplexity              value="0"/>      <RenderAutoMuteSurfaceAreaLimit  value="10000"/>  	<!--Default for now-->  	<RenderVolumeLODFactor value="2.0"/> diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt index 4030324ecb..4b4892f03b 100755 --- a/indra/newview/featuretable.txt +++ b/indra/newview/featuretable.txt @@ -31,7 +31,8 @@ RenderAnisotropic			1	1  RenderAvatarCloth			1	1  RenderAvatarLODFactor		1	1.0  RenderAvatarPhysicsLODFactor 1	1.0 -RenderAvatarMaxVisible      1   12 +RenderAvatarMaxNonImpostors 1   12 +RenderAvatarMaxComplexity          1	60000  RenderAvatarVP				1	1  RenderCubeMap				1	1  RenderDelayVBUpdate			1	0 @@ -49,7 +50,6 @@ RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0  RenderTransparentWater		1	1  RenderTreeLODFactor			1	1.0 -RenderUseImpostors			1	1  RenderVBOEnable				1	1  RenderVBOMappingDisable		1	1  RenderVolumeLODFactor		1	2.0 @@ -66,12 +66,10 @@ RenderShaderLightingMaxLevel	1	3  RenderDeferred				1	1  RenderDeferredSSAO			1	1  RenderShadowDetail			1	2 -WatchdogDisabled				1	1  RenderUseStreamVBO			1	1  RenderFSAASamples			1	16  RenderMaxTextureIndex		1	16 -  //  // Low Graphics Settings (fixed function)  // @@ -80,20 +78,20 @@ RenderAnisotropic			1	0  RenderAvatarCloth			1	0  RenderAvatarLODFactor		1	0  RenderAvatarPhysicsLODFactor 1	0 -RenderAvatarMaxVisible      1   3 +RenderAvatarMaxNonImpostors 1   12 +RenderAvatarMaxComplexity          1	30000  RenderAvatarVP				1	0  RenderFarClip				1	64  RenderFlexTimeFactor		1	0  RenderGlowResolutionPow		1	8 +RenderLocalLights			1	0  RenderMaxPartCount			1	0  RenderObjectBump			1	0 -RenderLocalLights			1	0  RenderReflectionDetail		1	0  RenderTerrainDetail			1	0  RenderTerrainLODFactor		1	1  RenderTransparentWater		1	0  RenderTreeLODFactor			1	0 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	1.125  VertexShaderEnable			1	0  WindLightUseAtmosShaders	1	0 @@ -103,7 +101,6 @@ RenderShadowDetail			1	0  WLSkyDetail					1	48  RenderFSAASamples			1	0 -  //  // Low Graphics Settings  // @@ -112,20 +109,20 @@ RenderAnisotropic			1	0  RenderAvatarCloth			1	0  RenderAvatarLODFactor		1	0  RenderAvatarPhysicsLODFactor 1	0 -RenderAvatarMaxVisible      1   3 +RenderAvatarMaxNonImpostors 1   12 +RenderAvatarMaxComplexity          1	30000  RenderAvatarVP				1	0  RenderFarClip				1	64  RenderFlexTimeFactor		1	0  RenderGlowResolutionPow		1	8 +RenderLocalLights			1	0  RenderMaxPartCount			1	0  RenderObjectBump			1	0 -RenderLocalLights			1	0  RenderReflectionDetail		1	0  RenderTerrainDetail			1	0  RenderTerrainLODFactor		1	1  RenderTransparentWater		1	0  RenderTreeLODFactor			1	0 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	1.125  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	0 @@ -155,7 +152,6 @@ RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	1.0  RenderTransparentWater		1	1  RenderTreeLODFactor			1	0.5 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	1.125  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	0 @@ -185,7 +181,6 @@ RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0  RenderTransparentWater		1	1  RenderTreeLODFactor			1	0.5 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	1.125  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	1 @@ -215,7 +210,6 @@ RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0  RenderTransparentWater		1	1  RenderTreeLODFactor			1	0.5 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	1.125  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	1 @@ -245,7 +239,6 @@ RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0  RenderTransparentWater		1	1  RenderTreeLODFactor			1	0.5 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	1.125  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	1 @@ -275,7 +268,6 @@ RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0  RenderTransparentWater		1	1  RenderTreeLODFactor			1	0.5 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	1.125  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	1 @@ -293,19 +285,19 @@ list Ultra  RenderAnisotropic			1	1  RenderAvatarCloth			1	1  RenderAvatarLODFactor		1	1.0 +RenderAvatarPhysicsLODFactor 1	1.0  RenderAvatarVP				1	1  RenderFarClip				1	256  RenderFlexTimeFactor		1	1.0  RenderGlowResolutionPow		1	9 +RenderLocalLights			1	1  RenderMaxPartCount			1	8192  RenderObjectBump			1	1 -RenderLocalLights			1	1  RenderReflectionDetail		1	4  RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0  RenderTransparentWater		1	1  RenderTreeLODFactor			1	1.0 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	2.0  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	1 @@ -315,7 +307,6 @@ RenderDeferredSSAO			1	1  RenderShadowDetail			1	2  RenderFSAASamples			1	2 -  //  // Class Unknown Hardware (unknown)  // @@ -407,18 +398,18 @@ list safe  RenderAnisotropic			1	0  RenderAvatarCloth			0	0  RenderAvatarVP				0	0 +RenderAvatarMaxNonImpostors 1	16 +RenderAvatarMaxComplexity          1	60000  RenderObjectBump			0	0  RenderLocalLights			1	0  RenderMaxPartCount			1	1024  RenderTerrainDetail 		1	0 -RenderUseImpostors			0	0  RenderVBOEnable				1	0  RenderReflectionDetail		0	0  WindLightUseAtmosShaders	0	0  RenderDeferred				0	0  RenderDeferredSSAO			0	0  RenderShadowDetail			0	0 -		  //  // CPU based feature masks @@ -462,37 +453,30 @@ UseOcclusion				0	0  list Intel_830M  RenderTerrainDetail			1	0  RenderVBOEnable				1	0 -RenderUseImpostors			0	0  list Intel_845G					  RenderTerrainDetail			1	0  RenderVBOEnable				1	0 -RenderUseImpostors			0	0  list Intel_855GM				  RenderTerrainDetail			1	0  RenderVBOEnable				1	0 -RenderUseImpostors			0	0  list Intel_865G			  RenderTerrainDetail			1	0  RenderVBOEnable				1	0 -RenderUseImpostors			0	0  list Intel_900		  RenderTerrainDetail			1	0  RenderVBOEnable				1	0 -RenderUseImpostors			0	0  list Intel_915GM	  RenderTerrainDetail			1	0  RenderVBOEnable				1	0 -RenderUseImpostors			0	0  list Intel_915G					  RenderTerrainDetail			1	0  RenderVBOEnable				1	0 -RenderUseImpostors			0	0  list Intel_945GM			  RenderTerrainDetail			1	0 diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt index 6d5284c602..121559bb7a 100755 --- a/indra/newview/featuretable_linux.txt +++ b/indra/newview/featuretable_linux.txt @@ -31,7 +31,7 @@ RenderAnisotropic			1	1  RenderAvatarCloth			1	1  RenderAvatarLODFactor		1	1.0  RenderAvatarPhysicsLODFactor 1	1.0 -RenderAvatarMaxVisible      1   12 +RenderAvatarMaxNonImpostors 1   12  RenderAvatarVP				1	1  RenderCubeMap				1	1  RenderDelayVBUpdate			1	0 @@ -49,7 +49,6 @@ RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0  RenderTransparentWater		1	1  RenderTreeLODFactor			1	1.0 -RenderUseImpostors			1	1  RenderVBOEnable				1	1  RenderVBOMappingDisable		1	1  RenderVolumeLODFactor		1	2.0 @@ -77,7 +76,7 @@ RenderAnisotropic			1	0  RenderAvatarCloth			1	0  RenderAvatarLODFactor		1	0  RenderAvatarPhysicsLODFactor 1	0 -RenderAvatarMaxVisible      1   3 +RenderAvatarMaxNonImpostors 1   3  RenderAvatarVP				1	0  RenderFarClip				1	64  RenderFlexTimeFactor		1	0 @@ -90,7 +89,6 @@ RenderTerrainDetail			1	0  RenderTerrainLODFactor		1	1  RenderTransparentWater		1	0  RenderTreeLODFactor			1	0 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	0.5  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	0 @@ -108,7 +106,7 @@ RenderAnisotropic			1	0  RenderAvatarCloth			1	0  RenderAvatarLODFactor		1	0  RenderAvatarPhysicsLODFactor 1	0 -RenderAvatarMaxVisible      1   3 +RenderAvatarMaxNonImpostors 1   3  RenderAvatarVP				1	0  RenderFarClip				1	64  RenderFlexTimeFactor		1	0 @@ -121,7 +119,6 @@ RenderTerrainDetail			1	0  RenderTerrainLODFactor		1	1  RenderTransparentWater		1	0  RenderTreeLODFactor			1	0 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	0.5  VertexShaderEnable			1	0  WindLightUseAtmosShaders	1	0 @@ -151,7 +148,6 @@ RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	1.0  RenderTransparentWater		1	1  RenderTreeLODFactor			1	0.5 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	1.125  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	0 @@ -181,7 +177,6 @@ RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0  RenderTransparentWater		1	1  RenderTreeLODFactor			1	0.5 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	1.125  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	1 @@ -211,7 +206,6 @@ RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0  RenderTransparentWater		1	1  RenderTreeLODFactor			1	0.5 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	1.125  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	1 @@ -241,7 +235,6 @@ RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0  RenderTransparentWater		1	1  RenderTreeLODFactor			1	0.5 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	1.125  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	1 @@ -271,7 +264,6 @@ RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0  RenderTransparentWater		1	1  RenderTreeLODFactor			1	0.5 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	1.125  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	1 @@ -301,7 +293,6 @@ RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0  RenderTransparentWater		1	1  RenderTreeLODFactor			1	1.0 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	2.0  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	1 @@ -405,7 +396,6 @@ RenderAvatarVP				0	0  RenderObjectBump			0	0  RenderMaxPartCount			1	1024  RenderTerrainDetail 		1	0 -RenderUseImpostors			0	0  RenderVBOEnable				1	0  RenderReflectionDetail		0	0  WindLightUseAtmosShaders	0	0 diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt index 628a96e988..c975678cea 100755 --- a/indra/newview/featuretable_mac.txt +++ b/indra/newview/featuretable_mac.txt @@ -4,7 +4,7 @@ version 37  // resetting the graphics preferences of all users to the recommended  // defaults.  This should be as rare an event as we can manage. -// NOTE: This is mostly identical to featuretable_mac.txt with a few differences +// NOTE: This is mostly identical to featuretable.txt with a few differences  // Should be combined into one table  // @@ -31,7 +31,8 @@ RenderAnisotropic				1	0  RenderAvatarCloth				1	1  RenderAvatarLODFactor			1	1.0  RenderAvatarPhysicsLODFactor 1	1.0 -RenderAvatarMaxVisible          1   12 +RenderAvatarMaxNonImpostors     1   12 +RenderAvatarMaxComplexity              1	60000  RenderAvatarVP					1	1  RenderCubeMap					1	1  RenderDelayVBUpdate				1	0 @@ -49,7 +50,6 @@ RenderTerrainDetail				1	1  RenderTerrainLODFactor			1	2.0  RenderTransparentWater			1	1  RenderTreeLODFactor				1	1.0 -RenderUseImpostors				1	1  RenderVBOEnable					1	1  RenderVBOMappingDisable			1	1  RenderVolumeLODFactor			1	2.0 @@ -66,7 +66,6 @@ RenderShaderLightingMaxLevel	1	3  RenderDeferred				1	1  RenderDeferredSSAO			1	1  RenderShadowDetail			1	2 -WatchdogDisabled				1	1  RenderUseStreamVBO			1	1  RenderFSAASamples			1	16  RenderMaxTextureIndex		1	16 @@ -79,7 +78,8 @@ RenderAnisotropic			1	0  RenderAvatarCloth			1	0  RenderAvatarLODFactor		1	0  RenderAvatarPhysicsLODFactor 1	0 -RenderAvatarMaxVisible      1   3 +RenderAvatarMaxNonImpostors 1   12 +RenderAvatarMaxComplexity          1	30000  RenderAvatarVP				1	0  RenderFarClip				1	64  RenderFlexTimeFactor		1	0 @@ -92,7 +92,6 @@ RenderTerrainDetail			1	0  RenderTerrainLODFactor		1	1  RenderTransparentWater		1	0  RenderTreeLODFactor			1	0 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	0.5  VertexShaderEnable			1	0  WindLightUseAtmosShaders	1	0 @@ -110,7 +109,8 @@ RenderAnisotropic			1	0  RenderAvatarCloth			1	0  RenderAvatarLODFactor		1	0  RenderAvatarPhysicsLODFactor 1	0 -RenderAvatarMaxVisible      1   3 +RenderAvatarMaxNonImpostors 1   12 +RenderAvatarMaxComplexity          1	30000  RenderAvatarVP				1	0  RenderFarClip				1	64  RenderFlexTimeFactor		1	0 @@ -123,7 +123,6 @@ RenderTerrainDetail			1	0  RenderTerrainLODFactor		1	1  RenderTransparentWater		1	0  RenderTreeLODFactor			1	0 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	0.5  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	0 @@ -153,7 +152,6 @@ RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	1.0  RenderTransparentWater		1	1  RenderTreeLODFactor			1	0.5 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	1.125  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	0 @@ -183,7 +181,6 @@ RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0  RenderTransparentWater		1	1  RenderTreeLODFactor			1	0.5 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	1.125  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	1 @@ -213,7 +210,6 @@ RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0  RenderTransparentWater		1	1  RenderTreeLODFactor			1	0.5 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	1.125  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	1 @@ -243,7 +239,6 @@ RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0  RenderTransparentWater		1	1  RenderTreeLODFactor			1	0.5 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	1.125  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	1 @@ -273,7 +268,6 @@ RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0  RenderTransparentWater		1	1  RenderTreeLODFactor			1	0.5 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	1.125  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	1 @@ -304,7 +298,6 @@ RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0  RenderTransparentWater		1	1  RenderTreeLODFactor			1	1.0 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	2.0  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	1 @@ -319,6 +312,9 @@ RenderFSAASamples			1	2  //  list Unknown  RenderVBOEnable				1	0 +RenderShadowDetail			1	0 +RenderDeferred				1	0 +RenderDeferredSSAO			1	0  //  // Class 0 Hardware (just old) @@ -343,6 +339,7 @@ RenderVBOEnable				1	1  //  list Class3  RenderVBOEnable				1	1 +  //  // Class 4 Hardware  // @@ -394,11 +391,12 @@ list safe  RenderAnisotropic			1	0  RenderAvatarCloth			0	0  RenderAvatarVP				0	0 -RenderLocalLights			1	0 +RenderAvatarMaxNonImpostors 1	16 +RenderAvatarMaxComplexity          1	60000  RenderObjectBump			0	0 +RenderLocalLights			1	0  RenderMaxPartCount			1	1024  RenderTerrainDetail 		1	0 -RenderUseImpostors			0	0  RenderVBOEnable				1	0  RenderReflectionDetail		0	0  WindLightUseAtmosShaders	0	0 @@ -523,7 +521,6 @@ Disregard96DefaultDrawDistance	1	0  list NVIDIA_GeForce_8600  RenderTextureMemoryMultiple			1	1	 -RenderUseImpostors				0	0  UseOcclusion				0	0  /// tweaked ATI to 96 Draw distance diff --git a/indra/newview/featuretable_solaris.txt b/indra/newview/featuretable_solaris.txt index e7cae1abdc..f6f0a9cb17 100755 --- a/indra/newview/featuretable_solaris.txt +++ b/indra/newview/featuretable_solaris.txt @@ -129,7 +129,7 @@ RenderUseFBO		1	0  list low  RenderVBO			1	0  RenderAniso			1	0 -RenderAvatarMaxVisible      1   3 +RenderAvatarMaxNonImpostors 1   3  RenderLighting		1	0  list medium diff --git a/indra/newview/featuretable_xp.txt b/indra/newview/featuretable_xp.txt index 68e09d010e..053dfb64d4 100755 --- a/indra/newview/featuretable_xp.txt +++ b/indra/newview/featuretable_xp.txt @@ -31,7 +31,7 @@ RenderAnisotropic			1	1  RenderAvatarCloth			1	1  RenderAvatarLODFactor		1	1.0  RenderAvatarPhysicsLODFactor 1	1.0 -RenderAvatarMaxVisible      1   12 +RenderAvatarMaxNonImpostors 1   12  RenderAvatarVP				1	1  RenderCubeMap				1	1  RenderDelayVBUpdate			1	0 @@ -49,7 +49,6 @@ RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0  RenderTransparentWater		1	1  RenderTreeLODFactor			1	1.0 -RenderUseImpostors			1	1  RenderVBOEnable				1	1  RenderVBOMappingDisable		1	1  RenderVolumeLODFactor		1	2.0 @@ -79,7 +78,7 @@ RenderAnisotropic			1	0  RenderAvatarCloth			1	0  RenderAvatarLODFactor		1	0  RenderAvatarPhysicsLODFactor 1	0 -RenderAvatarMaxVisible      1   3 +RenderAvatarMaxNonImpostors 1   3  RenderAvatarVP				1	0  RenderFarClip				1	64  RenderFlexTimeFactor		1	0 @@ -92,7 +91,6 @@ RenderTerrainDetail			1	0  RenderTerrainLODFactor		1	1  RenderTransparentWater		1	0  RenderTreeLODFactor			1	0 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	0.5  VertexShaderEnable			1	0  WindLightUseAtmosShaders	1	0 @@ -110,7 +108,7 @@ RenderAnisotropic			1	0  RenderAvatarCloth			1	0  RenderAvatarLODFactor		1	0  RenderAvatarPhysicsLODFactor 1	0 -RenderAvatarMaxVisible      1   3 +RenderAvatarMaxNonImpostors 1   3  RenderAvatarVP				1	0  RenderFarClip				1	64  RenderFlexTimeFactor		1	0 @@ -123,7 +121,6 @@ RenderTerrainDetail			1	0  RenderTerrainLODFactor		1	1  RenderTransparentWater		1	0  RenderTreeLODFactor			1	0 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	0.5  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	0 @@ -153,7 +150,6 @@ RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	1.0  RenderTransparentWater		1	1  RenderTreeLODFactor			1	0.5 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	1.125  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	0 @@ -183,7 +179,6 @@ RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0  RenderTransparentWater		1	1  RenderTreeLODFactor			1	0.5 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	1.125  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	1 @@ -213,7 +208,6 @@ RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0  RenderTransparentWater		1	1  RenderTreeLODFactor			1	0.5 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	1.125  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	1 @@ -243,7 +237,6 @@ RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0  RenderTransparentWater		1	1  RenderTreeLODFactor			1	0.5 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	1.125  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	1 @@ -273,7 +266,6 @@ RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0  RenderTransparentWater		1	1  RenderTreeLODFactor			1	0.5 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	1.125  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	1 @@ -303,7 +295,6 @@ RenderTerrainDetail			1	1  RenderTerrainLODFactor		1	2.0  RenderTransparentWater		1	1  RenderTreeLODFactor			1	1.0 -RenderUseImpostors			1	1  RenderVolumeLODFactor		1	2.0  VertexShaderEnable			1	1  WindLightUseAtmosShaders	1	1 @@ -404,7 +395,6 @@ RenderAvatarVP				0	0  RenderObjectBump			0	0  RenderMaxPartCount			1	1024  RenderTerrainDetail 		1	0 -RenderUseImpostors			0	0  RenderVBOEnable				1	0  RenderReflectionDetail		0	0  WindLightUseAtmosShaders	0	0 @@ -454,37 +444,30 @@ UseOcclusion				0	0  list Intel_830M  RenderTerrainDetail			1	0  RenderVBOEnable				1	0 -RenderUseImpostors			0	0  list Intel_845G					  RenderTerrainDetail			1	0  RenderVBOEnable				1	0 -RenderUseImpostors			0	0  list Intel_855GM				  RenderTerrainDetail			1	0  RenderVBOEnable				1	0 -RenderUseImpostors			0	0  list Intel_865G			  RenderTerrainDetail			1	0  RenderVBOEnable				1	0 -RenderUseImpostors			0	0  list Intel_900		  RenderTerrainDetail			1	0  RenderVBOEnable				1	0 -RenderUseImpostors			0	0  list Intel_915GM	  RenderTerrainDetail			1	0  RenderVBOEnable				1	0 -RenderUseImpostors			0	0  list Intel_915G					  RenderTerrainDetail			1	0  RenderVBOEnable				1	0 -RenderUseImpostors			0	0  list Intel_945GM			  RenderTerrainDetail			1	0 @@ -501,7 +484,6 @@ RenderVBOEnable				1	0  list Intel_965  RenderTerrainDetail			1	0  RenderVBOEnable				1	0 -RenderUseImpostors			1	0  UseOcclusion				0	0  list Intel_G33 diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 13f4e6ec63..27e8b83e13 100755 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -588,7 +588,7 @@ static void settings_to_globals()  	LLVOTree::sTreeFactor				= gSavedSettings.getF32("RenderTreeLODFactor");  	LLVOAvatar::sLODFactor				= gSavedSettings.getF32("RenderAvatarLODFactor");  	LLVOAvatar::sPhysicsLODFactor		= gSavedSettings.getF32("RenderAvatarPhysicsLODFactor"); -	LLVOAvatar::sMaxVisible				= (U32)gSavedSettings.getS32("RenderAvatarMaxVisible"); +	LLVOAvatar::updateImpostorRendering(gSavedSettings.getU32("RenderAvatarMaxNonImpostors"));  	LLVOAvatar::sVisibleInFirstPerson	= gSavedSettings.getBOOL("FirstPersonAvatarVisible");  	// clamp auto-open time to some minimum usable value  	LLFolderView::sAutoOpenTime			= llmax(0.25f, gSavedSettings.getF32("FolderAutoOpenDelay")); @@ -610,7 +610,6 @@ static void settings_modify()  	LLRenderTarget::sUseFBO				= gSavedSettings.getBOOL("RenderDeferred");  	LLPipeline::sRenderBump				= gSavedSettings.getBOOL("RenderObjectBump");  	LLPipeline::sRenderDeferred		= LLPipeline::sRenderBump && gSavedSettings.getBOOL("RenderDeferred"); -	LLVOAvatar::sUseImpostors			= gSavedSettings.getBOOL("RenderUseImpostors");  	LLVOSurfacePatch::sLODFactor		= gSavedSettings.getF32("RenderTerrainLODFactor");  	LLVOSurfacePatch::sLODFactor *= LLVOSurfacePatch::sLODFactor; //square lod factor to get exponential range of [1,4]  	gDebugGL = gSavedSettings.getBOOL("RenderDebugGL") || gDebugSession; diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index e1d3d1a905..e58c2c1037 100755 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -1281,13 +1281,6 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)  		return;  	} -	llassert(LLPipeline::sImpostorRender || !avatarp->isVisuallyMuted()); - -	/*if (single_avatar && avatarp->mSpecialRenderMode >= 1) // 1=anim preview, 2=image preview,  3=morph view -	{ -		gPipeline.enableLightsAvatarEdit(LLColor4(.5f, .5f, .5f, 1.f)); -	}*/ -	  	if (pass == 1)  	{  		// render rigid meshes (eyeballs) first diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp index af84aea6a6..5c8926e54c 100755 --- a/indra/newview/llfeaturemanager.cpp +++ b/indra/newview/llfeaturemanager.cpp @@ -606,7 +606,7 @@ void LLFeatureManager::applyRecommendedSettings()  	// cap the level at 2 (high)  	U32 level = llmax(GPU_CLASS_0, llmin(mGPUClass, GPU_CLASS_5)); -	LL_INFOS() << "Applying Recommended Features" << LL_ENDL; +	LL_INFOS("RenderInit") << "Applying Recommended Features for level " << level << LL_ENDL;  	setGraphicsLevel(level, false);  	gSavedSettings.setU32("RenderQualityPerformance", level); @@ -813,7 +813,7 @@ void LLFeatureManager::applyBaseMasks()  	if (osInfo.mMajorVer == 10 && osInfo.mMinorVer < 7)  	{  		maskFeatures("OSX_10_6_8"); -        } +	}  #endif  	// now mask by gpu string diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 0ac18408db..a37bebc547 100755 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -120,6 +120,18 @@ char const* const VISIBILITY_HIDDEN = "hidden";  //control value for middle mouse as talk2push button  const static std::string MIDDLE_MOUSE_CV = "MiddleMouse"; +/// This must equal the maximum value set for the IndirectMaxComplexity slider in panel_preferences_graphics1.xml +static const U32 INDIRECT_MAX_ARC_OFF = 101; // all the way to the right == disabled +static const U32 MIN_INDIRECT_ARC_LIMIT = 1; // must match minimum of IndirectMaxComplexity in panel_preferences_graphics1.xml +static const U32 MAX_INDIRECT_ARC_LIMIT = INDIRECT_MAX_ARC_OFF-1; // one short of all the way to the right... + +/// These are the effective range of values for RenderAvatarMaxComplexity +static const F32 MIN_ARC_LIMIT =  20000.0f; +static const F32 MAX_ARC_LIMIT = 300000.0f; +static const F32 MIN_ARC_LOG = log(MIN_ARC_LIMIT); +static const F32 MAX_ARC_LOG = log(MAX_ARC_LIMIT); +static const F32 ARC_LIMIT_MAP_SCALE = (MAX_ARC_LOG - MIN_ARC_LOG) / (MAX_INDIRECT_ARC_LIMIT - MIN_INDIRECT_ARC_LIMIT); +  class LLVoiceSetKeyDialog : public LLModalDialog  {  public: @@ -341,6 +353,8 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)  	mCommitCallbackRegistrar.add("Pref.VertexShaderEnable",		boost::bind(&LLFloaterPreference::onVertexShaderEnable, this));  	mCommitCallbackRegistrar.add("Pref.WindowedMod",			boost::bind(&LLFloaterPreference::onCommitWindowedMode, this));  	mCommitCallbackRegistrar.add("Pref.UpdateSliderText",		boost::bind(&LLFloaterPreference::refreshUI,this)); +	mCommitCallbackRegistrar.add("Pref.UpdateIndirectMaxNonImpostors",		boost::bind(&LLFloaterPreference::updateMaximumNonImpostors,this)); +	mCommitCallbackRegistrar.add("Pref.UpdateIndirectMaxComplexity",		boost::bind(&LLFloaterPreference::updateMaxComplexity,this));  	mCommitCallbackRegistrar.add("Pref.QualityPerformance",		boost::bind(&LLFloaterPreference::onChangeQuality, this, _2));  	mCommitCallbackRegistrar.add("Pref.applyUIColor",			boost::bind(&LLFloaterPreference::applyUIColor, this ,_1, _2));  	mCommitCallbackRegistrar.add("Pref.getUIColor",				boost::bind(&LLFloaterPreference::getUIColor, this ,_1, _2)); @@ -773,6 +787,9 @@ void LLFloaterPreference::updateShowFavoritesCheckbox(bool val)  void LLFloaterPreference::setHardwareDefaults()  {  	LLFeatureManager::getInstance()->applyRecommendedSettings(); +	// reset indirects before refresh because we may have changed what they control +	setIndirectControls();  +  	refreshEnabledGraphics();  	gSavedSettings.setString("PresetGraphicActive", "");  	LLPresetsManager::getInstance()->triggerChangeSignal(); @@ -785,7 +802,9 @@ void LLFloaterPreference::setHardwareDefaults()  		LLView* view = *iter;  		LLPanelPreference* panel = dynamic_cast<LLPanelPreference*>(view);  		if (panel) +		{  			panel->setHardwareDefaults(); +		}  	}  } @@ -930,6 +949,7 @@ void LLFloaterPreference::refreshEnabledGraphics()  	{  		instance->refresh();  	} +	setIndirectControls();  }  void LLFloaterPreference::onClickClearCache() @@ -1220,12 +1240,6 @@ void LLFloaterPreference::refreshEnabledState()  	ctrl_shadow->setEnabled(enabled);  	shadow_text->setEnabled(enabled); -	LLTextBox* maximum_arc_text = getChild<LLTextBox>("MaximumARCText"); - -	enabled = LLFeatureManager::getInstance()->isFeatureAvailable("RenderUseImpostors") && gSavedSettings.getBOOL("RenderUseImpostors"); -	getChildView("MaximumARC")->setEnabled(enabled); -	maximum_arc_text->setEnabled(enabled); -  	// Hardware settings  	F32 mem_multiplier = gSavedSettings.getF32("RenderTextureMemoryMultiple");  	S32Megabytes min_tex_mem = LLViewerTextureList::getMinVideoRamSetting(); @@ -1291,6 +1305,48 @@ void LLFloaterPreference::refreshEnabledState()  	getChild<LLButton>("default_creation_permissions")->setEnabled(LLStartUp::getStartupState() < STATE_STARTED ? false : true);  } +// static +void LLFloaterPreference::setIndirectControls() +{ +	/* +	 * We have controls that have an indirect relationship between the control +	 * values and adjacent text and the underlying setting they influence. +	 * In each case, the control and its associated setting are named Indirect<something> +	 * This method interrogates the controlled setting and establishes the +	 * appropriate value for the indirect control. It must be called whenever the +	 * underlying setting may have changed other than through the indirect control, +	 * such as when the 'Reset all to recommended settings' button is used... +	 */ +	setIndirectMaxNonImpostors(); +	setIndirectMaxArc(); +} + +// static +void LLFloaterPreference::setIndirectMaxNonImpostors() +{ +	U32 max_non_impostors = gSavedSettings.getU32("RenderAvatarMaxNonImpostors"); +	// for this one, we just need to make zero, which means off, the max value of the slider +	U32 indirect_max_non_impostors = (0 == max_non_impostors) ? LLVOAvatar::IMPOSTORS_OFF : max_non_impostors; +	gSavedSettings.setU32("IndirectMaxNonImpostors", indirect_max_non_impostors); +} + +void LLFloaterPreference::setIndirectMaxArc() +{ +	U32 max_arc = gSavedSettings.getU32("RenderAvatarMaxComplexity"); +	U32 indirect_max_arc; +	if (0 == max_arc) +	{ +		// the off position is all the way to the right, so set to control max +		indirect_max_arc = INDIRECT_MAX_ARC_OFF; +	} +	else +	{ +		// This is the inverse of the calculation in updateMaxComplexity +		indirect_max_arc = (U32)((log(max_arc) - MIN_ARC_LOG) / ARC_LIMIT_MAP_SCALE) + MIN_INDIRECT_ARC_LIMIT; +	} +	gSavedSettings.setU32("IndirectMaxComplexity", indirect_max_arc); +} +  void LLFloaterPreference::disableUnavailableSettings()  {	  	LLComboBox* ctrl_reflections   = getChild<LLComboBox>("Reflections"); @@ -1299,8 +1355,6 @@ void LLFloaterPreference::disableUnavailableSettings()  	LLCheckBoxCtrl* ctrl_avatar_cloth  = getChild<LLCheckBoxCtrl>("AvatarCloth");  	LLCheckBoxCtrl* ctrl_shader_enable = getChild<LLCheckBoxCtrl>("BasicShaders");  	LLCheckBoxCtrl* ctrl_wind_light    = getChild<LLCheckBoxCtrl>("WindLightUseAtmosShaders"); -	LLSliderCtrl* ctrl_maximum_arc = getChild<LLSliderCtrl>("MaximumARC"); -	LLTextBox* maximum_arc_text = getChild<LLTextBox>("MaximumARCText");  	LLCheckBoxCtrl* ctrl_deferred = getChild<LLCheckBoxCtrl>("UseLightShaders");  	LLCheckBoxCtrl* ctrl_deferred2 = getChild<LLCheckBoxCtrl>("UseLightShaders2");  	LLComboBox* ctrl_shadows = getChild<LLComboBox>("ShadowDetail"); @@ -1449,13 +1503,6 @@ void LLFloaterPreference::disableUnavailableSettings()  		ctrl_avatar_cloth->setEnabled(FALSE);  		ctrl_avatar_cloth->setValue(FALSE);  	} - -	// disabled impostors -	if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderUseImpostors")) -	{ -		ctrl_maximum_arc->setEnabled(FALSE); -		maximum_arc_text->setEnabled(FALSE); -	}  }  void LLFloaterPreference::refresh() @@ -1476,9 +1523,9 @@ void LLFloaterPreference::refresh()  	updateSliderText(getChild<LLSliderCtrl>("RenderPostProcess",	true), getChild<LLTextBox>("PostProcessText",			true));  	updateSliderText(getChild<LLSliderCtrl>("SkyMeshDetail",		true), getChild<LLTextBox>("SkyMeshDetailText",			true));  	updateSliderText(getChild<LLSliderCtrl>("TerrainDetail",		true), getChild<LLTextBox>("TerrainDetailText",			true));	 -	updateImpostorsText(getChild<LLSliderCtrl>("MaxNumberAvatarDrawn",		true), getChild<LLTextBox>("ImpostorsText",			true));	 -	updateMaximumArcText(getChild<LLSliderCtrl>("MaximumARC",		true), getChild<LLTextBox>("MaximumARCText",			true));	 - +	setIndirectControls(); +	setMaximumNonImpostorsText(gSavedSettings.getU32("RenderAvatarMaxNonImpostors"),getChild<LLTextBox>("IndirectMaxNonImpostorsText", true));	 +	setMaxComplexityText(gSavedSettings.getU32("RenderAvatarMaxComplexity"),getChild<LLTextBox>("IndirectMaxComplexityText", true));	  	refreshEnabledState();  } @@ -1621,12 +1668,12 @@ void LLFloaterPreference::onClickLogPath()  	//Path changed  	if(proposed_name != dir_name)  	{ -	gSavedPerAccountSettings.setString("InstantMessageLogPath", dir_name); +		gSavedPerAccountSettings.setString("InstantMessageLogPath", dir_name);  		mPriorInstantMessageLogPath = proposed_name; -	// enable/disable 'Delete transcripts button -	updateDeleteTranscriptsButton(); -} +		// enable/disable 'Delete transcripts button +		updateDeleteTranscriptsButton(); +	}  }  bool LLFloaterPreference::moveTranscriptsAndLog() @@ -1760,59 +1807,71 @@ void LLFloaterPreference::updateSliderText(LLSliderCtrl* ctrl, LLTextBox* text_b  	}  } -void LLFloaterPreference::updateImpostorsText(LLSliderCtrl* ctrl, LLTextBox* text_box) + +void LLFloaterPreference::updateMaximumNonImpostors()  { -	F32 value = (F32)ctrl->getValue().asReal(); +	// Called when the IndirectMaxNonImpostors control changes +	// Responsible for fixing the slider label (IndirectMaxNonImpostorsText) and setting RenderAvatarMaxNonImpostors +	LLSliderCtrl* ctrl = getChild<LLSliderCtrl>("IndirectMaxNonImpostors",true); +	U32 value = ctrl->getValue().asInteger(); -	if (value < IMPOSTORS_OFF) +	if (0 == value || LLVOAvatar::IMPOSTORS_OFF <= value)  	{ -		text_box->setText(llformat("%0.0f", value)); -		if (!gSavedSettings.getBOOL("RenderUseImpostors")) -		{ -			gSavedSettings.setBOOL("RenderUseImpostors", true); -		} +		value=0;  	} -	else +	gSavedSettings.setU32("RenderAvatarMaxNonImpostors", value); +	LLVOAvatar::updateImpostorRendering(value); // make it effective immediately +	setMaximumNonImpostorsText(value, getChild<LLTextBox>("IndirectMaxNonImpostorsText")); +} + +void LLFloaterPreference::setMaximumNonImpostorsText(U32 value, LLTextBox* text_box) +{ +	if (0 == value)  	{  		text_box->setText(LLTrans::getString("no_limit")); -		gSavedSettings.setBOOL("RenderUseImpostors", false); +	} +	else +	{ +		text_box->setText(llformat("%d", value));  	}  } -void LLFloaterPreference::updateMaximumArcText(LLSliderCtrl* ctrl, LLTextBox* text_box) +void LLFloaterPreference::updateMaxComplexity()  { -	F32 min_result = 20000.0f; -	F32 max_result = 300000.0f; +	// Called when the IndirectMaxComplexity control changes +	// Responsible for fixing the slider label (IndirectMaxComplexityText) and setting RenderAvatarMaxComplexity +	LLSliderCtrl* ctrl = getChild<LLSliderCtrl>("IndirectMaxComplexity"); +	U32 indirect_value = ctrl->getValue().asInteger(); +	U32 max_arc; +	 +	if (INDIRECT_MAX_ARC_OFF == indirect_value) +	{ +		// The 'off' position is when the slider is all the way to the right,  +		// which is a value of INDIRECT_MAX_ARC_OFF, +		// so it is necessary to set max_arc to 0 disable muted avatars. +		max_arc = 0; +	} +	else +	{ +		// if this is changed, the inverse calculation in setIndirectMaxArc +		// must be changed to match +		max_arc = (U32)exp(MIN_ARC_LOG + (ARC_LIMIT_MAP_SCALE * (indirect_value - MIN_INDIRECT_ARC_LIMIT))); +	} -	F32 value = (F32)ctrl->getValue().asReal(); +	gSavedSettings.setU32("RenderAvatarMaxComplexity", (U32)max_arc); +	setMaxComplexityText(max_arc, getChild<LLTextBox>("IndirectMaxComplexityText")); +} -	if (101.0f == value) +void LLFloaterPreference::setMaxComplexityText(U32 value, LLTextBox* text_box) +{ +	if (0 == value)  	{ -		// It has been decided that having the slider all the way to the right will be the off position, which -		// is a value of 101, so it is necessary to change value to 0 disable impostor generation. -		value = 0.0f;  		text_box->setText(LLTrans::getString("no_limit"));  	}  	else  	{ - -		// 100 is the maximum value of this control set in panel_preferences_graphics1.xml -		F32 minp = 1.0f; -		F32 maxp = 100.0f; - -		// The result should be between min_result and max_result -		F32 minv = log(min_result); -		F32 maxv = log(max_result); - -		// calculate adjustment factor -		F32 scale = (maxv - minv) / (maxp - minp); - -		value = exp(minv + scale * (value - minp)); - -		text_box->setText(llformat("%0.0f", value)); +		text_box->setText(llformat("%d", value));  	} - -	gSavedSettings.setU32("RenderAutoMuteRenderWeightLimit", (U32)value);  }  void LLFloaterPreference::onChangeMaturity() @@ -2411,7 +2470,6 @@ void LLPanelPreferenceGraphics::saveSettings()  void LLPanelPreferenceGraphics::setHardwareDefaults()  {  	resetDirtyChilds(); -	LLPanelPreference::setHardwareDefaults();  }  LLFloaterPreferenceProxy::LLFloaterPreferenceProxy(const LLSD& key) diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h index 10087f8aa3..c23d3a4593 100755 --- a/indra/newview/llfloaterpreference.h +++ b/indra/newview/llfloaterpreference.h @@ -58,10 +58,6 @@ typedef enum  	} EGraphicsSettings; -// 65 is the maximum value for impostors set in the xml file.  When the slider reaches this -// value impostors are turned off. -const U32	IMPOSTORS_OFF = 66; -  // Floater to control preferences (display, audio, bandwidth, general.  class LLFloaterPreference : public LLFloater, public LLAvatarPropertiesObserver, public LLConversationLogObserver  { @@ -162,8 +158,14 @@ public:  	void onChangeQuality(const LLSD& data);  	void updateSliderText(LLSliderCtrl* ctrl, LLTextBox* text_box); -	void updateImpostorsText(LLSliderCtrl* ctrl, LLTextBox* text_box); -	void updateMaximumArcText(LLSliderCtrl* ctrl, LLTextBox* text_box); +	void updateMaximumNonImpostors(); +	void setMaximumNonImpostorsText(U32 value, LLTextBox* text_box); +	void updateMaxComplexity(); +	void setMaxComplexityText(U32 value, LLTextBox* text_box); +	static void setIndirectControls(); +	static void setIndirectMaxNonImpostors(); +	static void setIndirectMaxArc(); +	  	void refreshUI();  	void onCommitParcelMediaAutoPlayEnable(); @@ -203,6 +205,7 @@ private:  	std::string mDirectoryVisibility;  	LLAvatarData mAvatarProperties; +	LOG_CLASS(LLFloaterPreference);  };  class LLPanelPreference : public LLPanel @@ -246,6 +249,7 @@ private:  	string_color_map_t mSavedColors;  	Updater* mBandWidthUpdater; +	LOG_CLASS(LLPanelPreference);  };  class LLPanelPreferenceGraphics : public LLPanelPreference @@ -267,6 +271,7 @@ protected:  private:  	void onPresetsListChange(); +	LOG_CLASS(LLPanelPreferenceGraphics);  };  class LLFloaterPreferenceProxy : public LLFloater @@ -294,7 +299,7 @@ private:  	bool mSocksSettingsDirty;  	typedef std::map<LLControlVariable*, LLSD> control_values_map_t;  	control_values_map_t mSavedValues; - +	LOG_CLASS(LLFloaterPreferenceProxy);  }; diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index c6eae68083..16f40fb747 100755 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -219,12 +219,6 @@ static bool handleAvatarPhysicsLODChanged(const LLSD& newvalue)  	return true;  } -static bool handleAvatarMaxVisibleChanged(const LLSD& newvalue) -{ -	LLVOAvatar::sMaxVisible = (U32) newvalue.asInteger(); -	return true; -} -  static bool handleTerrainLODChanged(const LLSD& newvalue)  {  		LLVOSurfacePatch::sLODFactor = (F32)newvalue.asReal(); @@ -418,12 +412,6 @@ static bool handleRenderBumpChanged(const LLSD& newval)  	return true;  } -static bool handleRenderUseImpostorsChanged(const LLSD& newvalue) -{ -	LLVOAvatar::sUseImpostors = newvalue.asBoolean(); -	return true; -} -  static bool handleRenderDebugGLChanged(const LLSD& newvalue)  {  	gDebugGL = newvalue.asBoolean() || gDebugSession; @@ -630,7 +618,6 @@ void settings_setup_listeners()  	gSavedSettings.getControl("RenderAvatarCloth")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));  	gSavedSettings.getControl("WindLightUseAtmosShaders")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2));  	gSavedSettings.getControl("RenderGammaFull")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2)); -	gSavedSettings.getControl("RenderAvatarMaxVisible")->getSignal()->connect(boost::bind(&handleAvatarMaxVisibleChanged, _2));  	gSavedSettings.getControl("RenderVolumeLODFactor")->getSignal()->connect(boost::bind(&handleVolumeLODChanged, _2));  	gSavedSettings.getControl("RenderAvatarLODFactor")->getSignal()->connect(boost::bind(&handleAvatarLODChanged, _2));  	gSavedSettings.getControl("RenderAvatarPhysicsLODFactor")->getSignal()->connect(boost::bind(&handleAvatarPhysicsLODChanged, _2)); @@ -648,7 +635,6 @@ void settings_setup_listeners()  	gSavedSettings.getControl("RenderObjectBump")->getSignal()->connect(boost::bind(&handleRenderBumpChanged, _2));  	gSavedSettings.getControl("RenderMaxVBOSize")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));  	gSavedSettings.getControl("RenderDeferredNoise")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2)); -	gSavedSettings.getControl("RenderUseImpostors")->getSignal()->connect(boost::bind(&handleRenderUseImpostorsChanged, _2));  	gSavedSettings.getControl("RenderDebugGL")->getSignal()->connect(boost::bind(&handleRenderDebugGLChanged, _2));  	gSavedSettings.getControl("RenderDebugPipeline")->getSignal()->connect(boost::bind(&handleRenderDebugPipelineChanged, _2));  	gSavedSettings.getControl("RenderResolutionDivisor")->getSignal()->connect(boost::bind(&handleRenderResolutionDivisorChanged, _2)); diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 0a35b2bb00..8136bd3a32 100755 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -613,7 +613,7 @@ private:  //-----------------------------------------------------------------------------  LLAvatarAppearanceDictionary *LLVOAvatar::sAvatarDictionary = NULL;  S32 LLVOAvatar::sFreezeCounter = 0; -U32 LLVOAvatar::sMaxVisible = 12; +U32 LLVOAvatar::sMaxNonImpostors = 12; // overridden based on graphics setting  F32 LLVOAvatar::sRenderDistance = 256.f;  S32	LLVOAvatar::sNumVisibleAvatars = 0;  S32	LLVOAvatar::sNumLODChangesThisFrame = 0; @@ -640,7 +640,7 @@ BOOL LLVOAvatar::sShowFootPlane = FALSE;  BOOL LLVOAvatar::sVisibleInFirstPerson = FALSE;  F32 LLVOAvatar::sLODFactor = 1.f;  F32 LLVOAvatar::sPhysicsLODFactor = 1.f; -BOOL LLVOAvatar::sUseImpostors = FALSE; +bool LLVOAvatar::sUseImpostors = false;  BOOL LLVOAvatar::sJointDebug = FALSE;  F32 LLVOAvatar::sUnbakedTime = 0.f;  F32 LLVOAvatar::sUnbakedUpdateTime = 0.f; @@ -3079,7 +3079,7 @@ bool LLVOAvatar::isVisuallyMuted() const  	{  			static LLCachedControl<U32> max_attachment_bytes(gSavedSettings, "RenderAutoMuteByteLimit", 0);  			static LLCachedControl<F32> max_attachment_area(gSavedSettings, "RenderAutoMuteSurfaceAreaLimit", 0.0); -			static LLCachedControl<U32> max_render_cost(gSavedSettings, "RenderAutoMuteRenderWeightLimit", 0); +			static LLCachedControl<U32> max_render_cost(gSavedSettings, "RenderAvatarMaxComplexity", 0);  			if (mVisuallyMuteSetting == ALWAYS_VISUAL_MUTE)  			{	// Always want to see this AV as an impostor @@ -3234,18 +3234,18 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)  		{ // visually muted avatars update at 16 hz  			mUpdatePeriod = 16;  		} -		else if (mVisibilityRank <= LLVOAvatar::sMaxVisible || -			mDrawable->mDistanceWRTCamera < 1.f + mag) -		{ //first 25% of max visible avatars are not impostored -			//also, don't impostor avatars whose bounding box may be penetrating the  -			//impostor camera near clip plane +		else if (   mVisibilityRank <= LLVOAvatar::sMaxNonImpostors +				 || mDrawable->mDistanceWRTCamera < 1.f + mag) +		{   // first 25% of max visible avatars are not impostored +			// also, don't impostor avatars whose bounding box may be penetrating the  +			// impostor camera near clip plane  			mUpdatePeriod = 1;  		} -		else if (mVisibilityRank > LLVOAvatar::sMaxVisible * 4) +		else if (mVisibilityRank > LLVOAvatar::sMaxNonImpostors * 4)  		{ //background avatars are REALLY slow updating impostors  			mUpdatePeriod = 16;  		} -		else if (mVisibilityRank > LLVOAvatar::sMaxVisible * 3) +		else if (mVisibilityRank > LLVOAvatar::sMaxNonImpostors * 3)  		{ //back 25% of max visible avatars are slow updating impostors  			mUpdatePeriod = 8;  		} @@ -8019,6 +8019,34 @@ void LLVOAvatar::getImpostorValues(LLVector4a* extents, LLVector3& angle, F32& d  	angle.mV[2] = da;  } +// static +const U32 LLVOAvatar::IMPOSTORS_OFF = 66; /* Must equal the maximum allowed the RenderAvatarMaxNonImpostors +										   * slider in panel_preferences_graphics1.xml */ + +// static +void LLVOAvatar::updateImpostorRendering(U32 newMaxNonImpostorsValue) +{ +	U32  oldmax = sMaxNonImpostors; +	bool oldflg = sUseImpostors; +	 +	if (IMPOSTORS_OFF <= newMaxNonImpostorsValue) +	{ +		sMaxNonImpostors = 0; +	} +	else +	{ +		sMaxNonImpostors = newMaxNonImpostorsValue; +	} +	// the sUseImpostors flag depends on whether or not sMaxNonImpostors is set to the no-limit value (0) +	sUseImpostors = (0 != sMaxNonImpostors); + +	LL_DEBUGS("AvatarRender") +		<< "was " << (oldflg ? "use" : "don't use" ) << " impostors (max " << oldmax << "); " +		<< "now " << (sUseImpostors ? "use" : "don't use" ) << " impostors (max " << sMaxNonImpostors << "); " +		<< LL_ENDL; +} + +  void LLVOAvatar::idleUpdateRenderCost()  {  	if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_AVATAR_DRAW_INFO)) @@ -8047,7 +8075,7 @@ void LLVOAvatar::idleUpdateRenderCost()  		// Render Cost (ARC)  		calculateUpdateRenderCost();				// Update mVisualComplexity if needed	 -		static LLCachedControl<U32> max_render_cost(gSavedSettings, "RenderAutoMuteRenderWeightLimit", 0); +		static LLCachedControl<U32> max_render_cost(gSavedSettings, "RenderAvatarMaxComplexity", 0);  		info_line = llformat("%d ARC", mVisualComplexity);  		if (max_render_cost != 0) // zero means don't care, so don't bother coloring based on this @@ -8068,7 +8096,7 @@ void LLVOAvatar::idleUpdateRenderCost()  		// Visual rank  		info_line = llformat("%d rank", mVisibilityRank);  		// Use grey for imposters, white for normal rendering or no impostors -		info_color.set((sMaxVisible > 0 && mVisibilityRank > sMaxVisible) ? LLColor4::grey : LLColor4::white); +		info_color.set((sMaxNonImpostors > 0 && mVisibilityRank > sMaxNonImpostors) ? LLColor4::grey : LLColor4::white);  		info_style = LLFontGL::NORMAL;  		mText->addLine(info_line, info_color, info_style); diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 0cf455db15..e3b7f1b6a7 100755 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -263,7 +263,7 @@ public:  	S32				getUpdatePeriod()				{ return mUpdatePeriod;			};  	const LLColor4 &  getMutedAVColor()				{ return mMutedAVColor;			}; - +	static void     updateImpostorRendering(U32 newMaxNonImpostorsValue);  	void 			idleUpdateBelowWater(); @@ -273,10 +273,12 @@ public:  public:  	static S32		sRenderName;  	static BOOL		sRenderGroupTitles; -	static U32		sMaxVisible; //(affected by control "RenderAvatarMaxVisible") +	static const U32 IMPOSTORS_OFF; /* Must equal the maximum allowed the RenderAvatarMaxNonImpostors +									 * slider in panel_preferences_graphics1.xml */ +	static U32		sMaxNonImpostors; //(affected by control "RenderAvatarMaxNonImpostors")  	static F32		sRenderDistance; //distance at which avatars will render.  	static BOOL		sShowAnimationDebug; // show animation debug info -	static BOOL		sUseImpostors; //use impostors for far away avatars +	static bool		sUseImpostors; //use impostors for far away avatars  	static BOOL		sShowFootPlane;	// show foot collision plane reported by server  	static BOOL		sShowCollisionVolumes;	// show skeletal collision volumes  	static BOOL		sVisibleInFirstPerson; diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 03712c1065..6002b5a4eb 100755 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -569,7 +569,7 @@ void LLPipeline::init()  	connectRefreshCachedSettingsSafe("RenderAutoMaskAlphaDeferred");  	connectRefreshCachedSettingsSafe("RenderAutoMaskAlphaNonDeferred");  	connectRefreshCachedSettingsSafe("RenderUseFarClip"); -	connectRefreshCachedSettingsSafe("RenderAvatarMaxVisible"); +	connectRefreshCachedSettingsSafe("RenderAvatarMaxNonImpostors");  	connectRefreshCachedSettingsSafe("RenderDelayVBUpdate");  	connectRefreshCachedSettingsSafe("UseOcclusion");  	connectRefreshCachedSettingsSafe("VertexShaderEnable"); @@ -1081,7 +1081,8 @@ void LLPipeline::refreshCachedSettings()  	LLPipeline::sAutoMaskAlphaDeferred = gSavedSettings.getBOOL("RenderAutoMaskAlphaDeferred");  	LLPipeline::sAutoMaskAlphaNonDeferred = gSavedSettings.getBOOL("RenderAutoMaskAlphaNonDeferred");  	LLPipeline::sUseFarClip = gSavedSettings.getBOOL("RenderUseFarClip"); -	LLVOAvatar::sMaxVisible = (U32)gSavedSettings.getS32("RenderAvatarMaxVisible"); +	LLVOAvatar::sMaxNonImpostors = gSavedSettings.getU32("RenderAvatarMaxNonImpostors"); +	LLVOAvatar::updateImpostorRendering(LLVOAvatar::sMaxNonImpostors);  	LLPipeline::sDelayVBUpdate = gSavedSettings.getBOOL("RenderDelayVBUpdate");  	LLPipeline::sUseOcclusion =  @@ -11357,7 +11358,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)  	{  		LL_RECORD_BLOCK_TIME(FTM_IMPOSTOR_MARK_VISIBLE);  		markVisible(avatar->mDrawable, *viewer_camera); -		LLVOAvatar::sUseImpostors = FALSE; +		LLVOAvatar::sUseImpostors = false; // @TODO why?  		LLVOAvatar::attachment_map_t::iterator iter;  		for (iter = avatar->mAttachmentPoints.begin(); @@ -11594,7 +11595,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)  	avatar->setImpostorDim(tdim); -	LLVOAvatar::sUseImpostors = TRUE; +	LLVOAvatar::sUseImpostors = true; // @TODO why?  	sUseOcclusion = occlusion;  	sReflectionRender = FALSE;  	sImpostorRender = FALSE; diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml index 756c765bbd..8634b5fed2 100755 --- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml @@ -481,7 +481,7 @@            </text>            <slider -            control_name="MaximumARC" +            control_name="IndirectMaxComplexity"              follows="left|top"              height="16"              initial_value="101" @@ -492,13 +492,13 @@              left="30"              min_val="1"              max_val="101" -            name="MaximumARC" +            name="IndirectMaxComplexity"              show_text="false"              top_delta="16"              width="300">              <slider.commit_callback -              function="Pref.UpdateSliderText" -              parameter="MaximumARCText" /> +              function="Pref.UpdateIndirectMaxComplexity" +              parameter="IndirectMaxComplexityText" />            </slider>            <text              type="string" @@ -509,31 +509,31 @@              top_delta="0"              left_delta="304"              text_readonly_color="LabelDisabledColor" -            name="MaximumARCText" +            name="IndirectMaxComplexityText"              width="128">                 0            </text>            <slider -            control_name="RenderAvatarMaxVisible" +            control_name="IndirectMaxNonImpostors"              decimal_digits="0"              follows="left|top"              height="16"              increment="1" -            initial_value="12" +            initial_value="0"              label="Max. # of non-impostors:"              label_width="185"              layout="topleft"              left="30"              min_val="1"              max_val="66" -            name="MaxNumberAvatarDrawn" +            name="IndirectMaxNonImpostors"              show_text="false"              top_delta="16"              width="300">              <slider.commit_callback -              function="Pref.UpdateSliderText" -              parameter="ImpostorsText" /> +              function="Pref.UpdateIndirectMaxNonImpostors" +              parameter="IndirectMaxNonImpostorsText" />            </slider>            <text              type="string" @@ -544,9 +544,9 @@              top_delta="0"              left_delta="304"              text_readonly_color="LabelDisabledColor" -            name="ImpostorsText" +            name="IndirectMaxNonImpostorsText"              width="128"> -               0 +               No Limit            </text>            <slider  | 
