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 |