Merge branch 'DRTVWR-559' of https://bitbucket.org/lindenlab/viewer
# Conflicts: # indra/newview/CMakeLists.txt # indra/newview/app_settings/settings.xml # indra/newview/featuretable.txt # indra/newview/featuretable_mac.txt # indra/newview/llfloaterpreference.cpp # indra/newview/llviewerdisplay.cpp # indra/newview/skins/default/xui/en/floater_preferences_graphics_advanced.xmlmaster
commit
b80fefa0ab
|
|
@ -487,7 +487,7 @@ inline const LLColor3 srgbColor3(const LLColor3 &a) {
|
|||
return srgbColor;
|
||||
}
|
||||
|
||||
inline const LLColor3 linearColor3(const F32* v) {
|
||||
inline const LLColor3 linearColor3p(const F32* v) {
|
||||
LLColor3 linearColor;
|
||||
linearColor.mV[0] = sRGBtoLinear(v[0]);
|
||||
linearColor.mV[1] = sRGBtoLinear(v[1]);
|
||||
|
|
@ -498,12 +498,12 @@ inline const LLColor3 linearColor3(const F32* v) {
|
|||
|
||||
template<class T>
|
||||
inline const LLColor3 linearColor3(const T& a) {
|
||||
return linearColor3(a.mV);
|
||||
return linearColor3p(a.mV);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
inline const LLVector3 linearColor3v(const T& a) {
|
||||
return LLVector3(linearColor3(a.mV).mV);
|
||||
return LLVector3(linearColor3p(a.mV).mV);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1368,6 +1368,7 @@ void LLShaderMgr::initAttribsAndUniforms()
|
|||
mReservedUniforms.push_back("specular");
|
||||
mReservedUniforms.push_back("lightExp");
|
||||
mReservedUniforms.push_back("waterFogColor");
|
||||
mReservedUniforms.push_back("waterFogColorLinear");
|
||||
mReservedUniforms.push_back("waterFogDensity");
|
||||
mReservedUniforms.push_back("waterFogKS");
|
||||
mReservedUniforms.push_back("refScale");
|
||||
|
|
|
|||
|
|
@ -210,6 +210,7 @@ public:
|
|||
WATER_SPECULAR, // "specular"
|
||||
WATER_SPECULAR_EXP, // "lightExp"
|
||||
WATER_FOGCOLOR, // "waterFogColor"
|
||||
WATER_FOGCOLOR_LINEAR, // "waterFogColorLinear"
|
||||
WATER_FOGDENSITY, // "waterFogDensity"
|
||||
WATER_FOGKS, // "waterFogKS"
|
||||
WATER_REFSCALE, // "refScale"
|
||||
|
|
|
|||
|
|
@ -2116,14 +2116,11 @@ set(viewer_APPSETTINGS_FILES
|
|||
app_settings/grass.xml
|
||||
app_settings/grids.xml
|
||||
app_settings/growl_notifications.xml
|
||||
app_settings/high_graphics.xml
|
||||
app_settings/ignorable_dialogs.xml
|
||||
app_settings/key_bindings.xml
|
||||
app_settings/keywords.ini
|
||||
app_settings/keywords_lsl_default.xml
|
||||
app_settings/logcontrol.xml
|
||||
app_settings/low_graphics.xml
|
||||
app_settings/mid_graphics.xml
|
||||
app_settings/posestand.xml
|
||||
app_settings/quick_preferences.xml
|
||||
app_settings/scriptlibrary_aa.xml
|
||||
|
|
@ -2141,7 +2138,6 @@ set(viewer_APPSETTINGS_FILES
|
|||
app_settings/std_bump.ini
|
||||
#app_settings/toolbars.xml FS:AO moved to skins
|
||||
app_settings/trees.xml
|
||||
app_settings/ultra_graphics.xml
|
||||
app_settings/viewerart.xml
|
||||
${CMAKE_SOURCE_DIR}/../etc/message.xml
|
||||
${CMAKE_SOURCE_DIR}/../scripts/messages/message_template.msg
|
||||
|
|
|
|||
|
|
@ -33,7 +33,6 @@
|
|||
<string>RenderLocalLights</string>
|
||||
<string>RenderMaxPartCount</string>
|
||||
<string>RenderQualityPerformance</string>
|
||||
<string>RenderReflectionDetail</string>
|
||||
<string>RenderReflectionProbeDetail</string>
|
||||
<string>RenderShaderLightingMaxLevel</string>
|
||||
<string>RenderShadowDetail</string>
|
||||
|
|
|
|||
|
|
@ -1,41 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<settings version = "101">
|
||||
<!--NO SHADERS-->
|
||||
<RenderAvatarCloth value="FALSE"/>
|
||||
<!--Default for now-->
|
||||
<RenderAvatarLODFactor value="1.0"/>
|
||||
<!--Default for now-->
|
||||
<RenderAvatarPhysicsLODFactor value="0.9"/>
|
||||
<!--Short Range-->
|
||||
<RenderFarClip value="128"/>
|
||||
<!--Default for now-->
|
||||
<RenderFlexTimeFactor value="1"/>
|
||||
<!--256... but they do not use this-->
|
||||
<RenderGlowResolutionPow value="9"/>
|
||||
<!--Low number-->
|
||||
<RenderMaxPartCount value="4096"/>
|
||||
<!--bump okay-->
|
||||
<RenderObjectBump value="TRUE"/>
|
||||
<!--NO SHADERS-->
|
||||
<RenderReflectionDetail value="2"/>
|
||||
<!--Simple-->
|
||||
<RenderTerrainDetail value="1"/>
|
||||
<!--Default for now-->
|
||||
<RenderTerrainLODFactor value="2"/>
|
||||
<!--Default for now-->
|
||||
<RenderTreeLODFactor value="0.5"/>
|
||||
<!--Avater Impostors and Visual Muting Limits-->
|
||||
<RenderAvatarMaxNonImpostors value="20"/>
|
||||
<RenderAvatarMaxComplexity value="350000"/>
|
||||
<RenderAutoMuteSurfaceAreaLimit value="1250.0"/>
|
||||
<!--Default for now-->
|
||||
<RenderVolumeLODFactor value="1.125"/>
|
||||
<!--NO SHADERS-->
|
||||
<WindLightUseAtmosShaders value="TRUE"/>
|
||||
<!--Deferred Shading-->
|
||||
<RenderDeferred value="FALSE"/>
|
||||
<!--SSAO Disabled-->
|
||||
<RenderDeferredSSAO value="FALSE"/>
|
||||
<!--Sun Shadows-->
|
||||
<RenderShadowDetail value="0"/>
|
||||
</settings>
|
||||
|
|
@ -1,41 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<settings version = "101">
|
||||
<!--NO SHADERS-->
|
||||
<RenderAvatarCloth value="FALSE"/>
|
||||
<!--Default for now-->
|
||||
<RenderAvatarLODFactor value="0.5"/>
|
||||
<!--Default for now-->
|
||||
<RenderAvatarPhysicsLODFactor value="0.0"/>
|
||||
<!--Short Range-->
|
||||
<RenderFarClip value="64"/>
|
||||
<!--Default for now-->
|
||||
<RenderFlexTimeFactor value="0.5"/>
|
||||
<!--256... but they do not use this-->
|
||||
<RenderGlowResolutionPow value="8"/>
|
||||
<!--Low number-->
|
||||
<RenderMaxPartCount value="1024"/>
|
||||
<!--bump okay-->
|
||||
<RenderObjectBump value="FALSE"/>
|
||||
<!--NO SHADERS-->
|
||||
<RenderReflectionDetail value="0"/>
|
||||
<!--Simple-->
|
||||
<RenderTerrainDetail value="0"/>
|
||||
<!--Default for now-->
|
||||
<RenderTerrainLODFactor value="1.0"/>
|
||||
<!--Default for now-->
|
||||
<RenderTreeLODFactor value="0.5"/>
|
||||
<!--Avater Impostors and Visual Muting Limits-->
|
||||
<RenderAvatarMaxNonImpostors value="12"/>
|
||||
<RenderAvatarMaxComplexity value="80000"/>
|
||||
<RenderAutoMuteSurfaceAreaLimit value="750.0"/>
|
||||
<!--Default for now-->
|
||||
<RenderVolumeLODFactor value="1.125"/>
|
||||
<!--NO SHADERS-->
|
||||
<WindLightUseAtmosShaders value="FALSE"/>
|
||||
<!--No Deferred Shading-->
|
||||
<RenderDeferred value="FALSE"/>
|
||||
<!--SSAO Disabled-->
|
||||
<RenderDeferredSSAO value="FALSE"/>
|
||||
<!--No Shadows-->
|
||||
<RenderShadowDetail value="0"/>
|
||||
</settings>
|
||||
|
|
@ -1,41 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<settings version = "101">
|
||||
<!--NO SHADERS-->
|
||||
<RenderAvatarCloth value="FALSE"/>
|
||||
<!--Default for now-->
|
||||
<RenderAvatarLODFactor value="0.5"/>
|
||||
<!--Default for now-->
|
||||
<RenderAvatarPhysicsLODFactor value="0.75"/>
|
||||
<!--Short Range-->
|
||||
<RenderFarClip value="96"/>
|
||||
<!--Default for now-->
|
||||
<RenderFlexTimeFactor value="1"/>
|
||||
<!--256... but they do not use this-->
|
||||
<RenderGlowResolutionPow value="8"/>
|
||||
<!--Low number-->
|
||||
<RenderMaxPartCount value="2048"/>
|
||||
<!--bump okay-->
|
||||
<RenderObjectBump value="TRUE"/>
|
||||
<!--NO SHADERS-->
|
||||
<RenderReflectionDetail value="0"/>
|
||||
<!--Simple-->
|
||||
<RenderTerrainDetail value="1"/>
|
||||
<!--Default for now-->
|
||||
<RenderTerrainLODFactor value="1.0"/>
|
||||
<!--Default for now-->
|
||||
<RenderTreeLODFactor value="0.5"/>
|
||||
<!--Avater Impostors and Visual Muting Limits-->
|
||||
<RenderAvatarMaxNonImpostors value="18"/>
|
||||
<RenderAvatarMaxComplexity value="150000"/>
|
||||
<RenderAutoMuteSurfaceAreaLimit value="1000.0"/>
|
||||
<!--Default for now-->
|
||||
<RenderVolumeLODFactor value="1.125"/>
|
||||
<!--NO SHADERS-->
|
||||
<WindLightUseAtmosShaders value="FALSE"/>
|
||||
<!--No Deferred Shading-->
|
||||
<RenderDeferred value="FALSE"/>
|
||||
<!--SSAO Disabled-->
|
||||
<RenderDeferredSSAO value="FALSE"/>
|
||||
<!--No Shadows-->
|
||||
<RenderShadowDetail value="0"/>
|
||||
</settings>
|
||||
|
|
@ -13392,7 +13392,7 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>RenderReflectionDetail</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Detail of reflection render pass.</string>
|
||||
<string>DEPRECATED -- use RenderTransparentWater and RenderReflectionProbeDetail -- Detail of reflection render pass.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
|
|
@ -26079,17 +26079,6 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FSUserTargetReflections</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Set by auto tune floater on build</string>
|
||||
<key>Persist</key>
|
||||
<integer>0</integer>
|
||||
<key>Type</key>
|
||||
<string>S32</string>
|
||||
<key>Value</key>
|
||||
<integer>4</integer>
|
||||
</map>
|
||||
<key>FSReportRegionRestartToChat</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ uniform vec3 light_diffuse[8];
|
|||
void waterClip(vec3 pos);
|
||||
|
||||
#ifdef WATER_FOG
|
||||
vec4 applyWaterFogView(vec3 pos, vec4 color);
|
||||
vec4 applyWaterFogViewLinear(vec3 pos, vec4 color);
|
||||
#endif
|
||||
|
||||
vec3 srgb_to_linear(vec3 c);
|
||||
|
|
@ -293,7 +293,7 @@ void main()
|
|||
#endif // !defined(LOCAL_LIGHT_KILL)
|
||||
|
||||
#ifdef WATER_FOG
|
||||
color = applyWaterFogView(pos.xyz, color);
|
||||
color = applyWaterFogViewLinear(pos.xyz, color);
|
||||
#endif // WATER_FOG
|
||||
|
||||
#endif // #else // FOR_IMPOSTOR
|
||||
|
|
|
|||
|
|
@ -26,10 +26,12 @@
|
|||
out vec4 frag_color;
|
||||
|
||||
uniform sampler2D diffuseMap;
|
||||
uniform sampler2D bumpMap;
|
||||
uniform sampler2D bumpMap;
|
||||
|
||||
#ifdef TRANSPARENT_WATER
|
||||
uniform sampler2D screenTex;
|
||||
uniform sampler2D refTex;
|
||||
uniform sampler2D screenDepth;
|
||||
#endif
|
||||
|
||||
uniform vec4 fogCol;
|
||||
uniform vec3 lightDir;
|
||||
|
|
@ -43,6 +45,7 @@ uniform float kd;
|
|||
uniform vec4 waterPlane;
|
||||
uniform vec3 eyeVec;
|
||||
uniform vec4 waterFogColor;
|
||||
uniform vec3 waterFogColorLinear;
|
||||
uniform float waterFogKS;
|
||||
uniform vec2 screenRes;
|
||||
|
||||
|
|
@ -57,8 +60,8 @@ vec4 applyWaterFogViewLinear(vec3 pos, vec4 color);
|
|||
void main()
|
||||
{
|
||||
vec4 color;
|
||||
|
||||
//get detail normals
|
||||
|
||||
//get detail normals
|
||||
vec3 wave1 = texture2D(bumpMap, vec2(refCoord.w, view.w)).xyz*2.0-1.0;
|
||||
vec3 wave2 = texture2D(bumpMap, littleWave.xy).xyz*2.0-1.0;
|
||||
vec3 wave3 = texture2D(bumpMap, littleWave.zw).xyz*2.0-1.0;
|
||||
|
|
@ -67,8 +70,12 @@ void main()
|
|||
//figure out distortion vector (ripply)
|
||||
vec2 distort = (refCoord.xy/refCoord.z) * 0.5 + 0.5;
|
||||
distort = distort+wavef.xy*refScale;
|
||||
|
||||
|
||||
#ifdef TRANSPARENT_WATER
|
||||
vec4 fb = texture2D(screenTex, distort);
|
||||
|
||||
#else
|
||||
vec4 fb = vec4(waterFogColorLinear, 0.0);
|
||||
#endif
|
||||
|
||||
frag_color = applyWaterFogViewLinear(vary_position, fb);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -55,8 +55,10 @@ vec3 pbrPunctual(vec3 diffuseColor, vec3 specularColor,
|
|||
uniform sampler2D bumpMap;
|
||||
uniform sampler2D bumpMap2;
|
||||
uniform float blend_factor;
|
||||
#ifdef TRANSPARENT_WATER
|
||||
uniform sampler2D screenTex;
|
||||
uniform sampler2D screenDepth;
|
||||
#endif
|
||||
|
||||
uniform sampler2D refTex;
|
||||
|
||||
|
|
@ -73,6 +75,7 @@ uniform float fresnelScale;
|
|||
uniform float fresnelOffset;
|
||||
uniform float blurMultiplier;
|
||||
uniform vec4 waterFogColor;
|
||||
uniform vec3 waterFogColorLinear;
|
||||
|
||||
|
||||
//bigWave is (refCoord.w, view.w);
|
||||
|
|
@ -174,6 +177,7 @@ void main()
|
|||
vec2 distort2 = distort + waver.xy * refScale / max(dmod * df1, 1.0);
|
||||
distort2 = clamp(distort2, vec2(0), vec2(0.99));
|
||||
|
||||
#ifdef TRANSPARENT_WATER
|
||||
vec4 fb = texture2D(screenTex, distort2);
|
||||
float depth = texture2D(screenDepth, distort2).r;
|
||||
vec3 refPos = getPositionWithNDC(vec3(distort2*2.0-vec2(1.0), depth*2.0-1.0));
|
||||
|
|
@ -188,6 +192,9 @@ void main()
|
|||
}
|
||||
|
||||
fb = applyWaterFogViewLinear(refPos, fb);
|
||||
#else
|
||||
vec4 fb = vec4(waterFogColorLinear.rgb, 0.0);
|
||||
#endif
|
||||
|
||||
vec3 sunlit;
|
||||
vec3 amblit;
|
||||
|
|
|
|||
|
|
@ -1,42 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<settings version = "101">
|
||||
<!--NO SHADERS-->
|
||||
<RenderAvatarCloth value="TRUE"/>
|
||||
<!--Default for now-->
|
||||
<RenderAvatarLODFactor value="1.0"/>
|
||||
<!--Default for now-->
|
||||
<RenderAvatarPhysicsLODFactor value="1.0"/>
|
||||
<!--Short Range-->
|
||||
<RenderFarClip value="256"/>
|
||||
<!--Default for now-->
|
||||
<RenderFlexTimeFactor value="1"/>
|
||||
<!--256... but they do not use this-->
|
||||
<RenderGlowResolutionPow value="9"/>
|
||||
<!--Low number-->
|
||||
<RenderMaxPartCount value="4096"/>
|
||||
<!--bump okay-->
|
||||
<RenderObjectBump value="TRUE"/>
|
||||
<!--NO SHADERS-->
|
||||
<RenderReflectionDetail value="4"/>
|
||||
<!--Simple-->
|
||||
<RenderTerrainDetail value="1"/>
|
||||
<!--Default for now-->
|
||||
<RenderTerrainLODFactor value="2.0"/>
|
||||
<!--Default for now-->
|
||||
<RenderTreeLODFactor value="1.0"/>
|
||||
<!--Avater Impostors and Visual Muting Limits (real defaults set
|
||||
based on default graphics setting -->
|
||||
<RenderAvatarMaxNonImpostors value="0"/>
|
||||
<RenderAvatarMaxComplexity value="350000"/>
|
||||
<RenderAutoMuteSurfaceAreaLimit value="1500.0"/>
|
||||
<!--Default for now-->
|
||||
<RenderVolumeLODFactor value="2.0"/>
|
||||
<!--NO SHADERS-->
|
||||
<WindLightUseAtmosShaders value="TRUE"/>
|
||||
<!--Deferred Shading-->
|
||||
<RenderDeferred value="TRUE"/>
|
||||
<!--SSAO Enabled-->
|
||||
<RenderDeferredSSAO value="TRUE"/>
|
||||
<!--Full Shadows-->
|
||||
<RenderShadowDetail value="2"/>
|
||||
</settings>
|
||||
|
|
@ -45,11 +45,10 @@ RenderGround 1 1
|
|||
RenderMaxPartCount 1 8192
|
||||
RenderObjectBump 1 1
|
||||
RenderLocalLights 1 1
|
||||
RenderReflectionDetail 1 4
|
||||
RenderTransparentWater 1 1
|
||||
RenderReflectionProbeDetail 1 2
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 1.0
|
||||
RenderVBOEnable 1 1
|
||||
RenderVBOMappingDisable 1 1
|
||||
|
|
@ -89,11 +88,10 @@ RenderFlexTimeFactor 1 0
|
|||
RenderGlowResolutionPow 1 8
|
||||
RenderLocalLights 1 0
|
||||
RenderMaxPartCount 1 256
|
||||
RenderReflectionDetail 1 0
|
||||
RenderTransparentWater 1 0
|
||||
RenderReflectionProbeDetail 1 -1
|
||||
RenderTerrainDetail 1 0
|
||||
RenderTerrainLODFactor 1 1
|
||||
RenderTransparentWater 1 0
|
||||
RenderTreeLODFactor 1 0
|
||||
RenderVolumeLODFactor 1 1.5
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -115,11 +113,10 @@ RenderFlexTimeFactor 1 1.0
|
|||
RenderGlowResolutionPow 1 8
|
||||
RenderMaxPartCount 1 2048
|
||||
RenderLocalLights 1 1
|
||||
RenderReflectionDetail 1 0
|
||||
RenderTransparentWater 1 0
|
||||
RenderReflectionProbeDetail 1 -1
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 1.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -141,10 +138,9 @@ RenderFlexTimeFactor 1 1.0
|
|||
RenderGlowResolutionPow 1 9
|
||||
RenderMaxPartCount 1 4096
|
||||
RenderLocalLights 1 1
|
||||
RenderReflectionDetail 1 0
|
||||
RenderTransparentWater 1 0
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -167,10 +163,9 @@ RenderFlexTimeFactor 1 1.0
|
|||
RenderGlowResolutionPow 1 9
|
||||
RenderMaxPartCount 1 4096
|
||||
RenderLocalLights 1 1
|
||||
RenderReflectionDetail 1 0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -193,10 +188,9 @@ RenderFlexTimeFactor 1 1.0
|
|||
RenderGlowResolutionPow 1 9
|
||||
RenderMaxPartCount 1 4096
|
||||
RenderLocalLights 1 1
|
||||
RenderReflectionDetail 1 0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
RenderDeferredSSAO 1 1
|
||||
|
|
@ -219,7 +213,6 @@ RenderFlexTimeFactor 1 1.0
|
|||
RenderGlowResolutionPow 1 9
|
||||
RenderMaxPartCount 1 4096
|
||||
RenderLocalLights 1 1
|
||||
RenderReflectionDetail 1 0
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
|
|
@ -244,7 +237,6 @@ RenderFlexTimeFactor 1 1.0
|
|||
RenderGlowResolutionPow 1 9
|
||||
RenderLocalLights 1 1
|
||||
RenderMaxPartCount 1 8192
|
||||
RenderReflectionDetail 1 4
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
|
|
@ -282,7 +274,7 @@ RenderAvatarMaxComplexity 1 80000
|
|||
RenderLocalLights 1 0
|
||||
RenderMaxPartCount 1 1024
|
||||
RenderTerrainDetail 1 0
|
||||
RenderReflectionDetail 0 0
|
||||
RenderTransparentWater 1 0
|
||||
RenderDeferredSSAO 0 0
|
||||
RenderShadowDetail 0 0
|
||||
RenderReflectionProbeDetail 0 -1
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
version 32
|
||||
version 33
|
||||
// The version number above should be incremented IF AND ONLY IF some
|
||||
// change has been made that is sufficiently important to justify
|
||||
// resetting the graphics preferences of all users to the recommended
|
||||
|
|
@ -45,11 +45,10 @@ RenderGround 1 1
|
|||
RenderMaxPartCount 1 8192
|
||||
RenderObjectBump 1 1
|
||||
RenderLocalLights 1 1
|
||||
RenderReflectionDetail 1 4
|
||||
RenderTransparentWater 1 1
|
||||
RenderReflectionProbeDetail 1 2
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 1.0
|
||||
RenderVBOEnable 1 1
|
||||
RenderVBOMappingDisable 1 1
|
||||
|
|
@ -89,11 +88,10 @@ RenderFlexTimeFactor 1 0
|
|||
RenderGlowResolutionPow 1 8
|
||||
RenderLocalLights 1 0
|
||||
RenderMaxPartCount 1 256
|
||||
RenderReflectionDetail 1 0
|
||||
RenderTransparentWater 1 0
|
||||
RenderReflectionProbeDetail 1 -1
|
||||
RenderTerrainDetail 1 0
|
||||
RenderTerrainLODFactor 1 1
|
||||
RenderTransparentWater 1 0
|
||||
RenderTreeLODFactor 1 0
|
||||
RenderVolumeLODFactor 1 1.5
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -115,11 +113,10 @@ RenderFlexTimeFactor 1 1.0
|
|||
RenderGlowResolutionPow 1 8
|
||||
RenderMaxPartCount 1 2048
|
||||
RenderLocalLights 1 1
|
||||
RenderReflectionDetail 1 0
|
||||
RenderTransparentWater 1 0
|
||||
RenderReflectionProbeDetail 1 -1
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 1.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -141,10 +138,9 @@ RenderFlexTimeFactor 1 1.0
|
|||
RenderGlowResolutionPow 1 9
|
||||
RenderMaxPartCount 1 4096
|
||||
RenderLocalLights 1 1
|
||||
RenderReflectionDetail 1 0
|
||||
RenderTransparentWater 1 0
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -167,10 +163,9 @@ RenderFlexTimeFactor 1 1.0
|
|||
RenderGlowResolutionPow 1 9
|
||||
RenderMaxPartCount 1 4096
|
||||
RenderLocalLights 1 1
|
||||
RenderReflectionDetail 1 0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
RenderDeferredSSAO 1 0
|
||||
|
|
@ -193,10 +188,9 @@ RenderFlexTimeFactor 1 1.0
|
|||
RenderGlowResolutionPow 1 9
|
||||
RenderMaxPartCount 1 4096
|
||||
RenderLocalLights 1 1
|
||||
RenderReflectionDetail 1 0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
RenderDeferredSSAO 1 1
|
||||
|
|
@ -219,7 +213,6 @@ RenderFlexTimeFactor 1 1.0
|
|||
RenderGlowResolutionPow 1 9
|
||||
RenderMaxPartCount 1 4096
|
||||
RenderLocalLights 1 1
|
||||
RenderReflectionDetail 1 0
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
|
|
@ -244,7 +237,6 @@ RenderFlexTimeFactor 1 1.0
|
|||
RenderGlowResolutionPow 1 9
|
||||
RenderLocalLights 1 1
|
||||
RenderMaxPartCount 1 8192
|
||||
RenderReflectionDetail 1 4
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
|
|
@ -282,7 +274,7 @@ RenderAvatarMaxComplexity 1 80000
|
|||
RenderLocalLights 1 0
|
||||
RenderMaxPartCount 1 1024
|
||||
RenderTerrainDetail 1 0
|
||||
RenderReflectionDetail 0 0
|
||||
RenderTransparentWater 1 0
|
||||
RenderDeferredSSAO 0 0
|
||||
RenderShadowDetail 0 0
|
||||
RenderReflectionProbeDetail 0 -1
|
||||
|
|
|
|||
|
|
@ -45,7 +45,6 @@ RenderGround 1 1
|
|||
RenderMaxPartCount 1 8192
|
||||
RenderObjectBump 1 1
|
||||
RenderLocalLights 1 1
|
||||
RenderReflectionDetail 1 4
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
|
|
@ -87,7 +86,6 @@ RenderFlexTimeFactor 1 0
|
|||
RenderGlowResolutionPow 1 8
|
||||
RenderLocalLights 1 0
|
||||
RenderMaxPartCount 1 256
|
||||
RenderReflectionDetail 1 0
|
||||
RenderTerrainDetail 1 0
|
||||
RenderTerrainLODFactor 1 1
|
||||
RenderTransparentWater 1 0
|
||||
|
|
@ -113,7 +111,6 @@ RenderFlexTimeFactor 1 1.0
|
|||
RenderGlowResolutionPow 1 8
|
||||
RenderMaxPartCount 1 2048
|
||||
RenderLocalLights 1 1
|
||||
RenderReflectionDetail 1 0
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 1.0
|
||||
RenderTransparentWater 1 1
|
||||
|
|
@ -139,7 +136,6 @@ RenderFlexTimeFactor 1 1.0
|
|||
RenderGlowResolutionPow 1 9
|
||||
RenderMaxPartCount 1 4096
|
||||
RenderLocalLights 1 1
|
||||
RenderReflectionDetail 1 0
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
|
|
@ -165,7 +161,6 @@ RenderFlexTimeFactor 1 1.0
|
|||
RenderGlowResolutionPow 1 9
|
||||
RenderMaxPartCount 1 4096
|
||||
RenderLocalLights 1 1
|
||||
RenderReflectionDetail 1 0
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
|
|
@ -191,7 +186,6 @@ RenderFlexTimeFactor 1 1.0
|
|||
RenderGlowResolutionPow 1 9
|
||||
RenderMaxPartCount 1 4096
|
||||
RenderLocalLights 1 1
|
||||
RenderReflectionDetail 1 0
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
|
|
@ -217,7 +211,6 @@ RenderFlexTimeFactor 1 1.0
|
|||
RenderGlowResolutionPow 1 9
|
||||
RenderMaxPartCount 1 4096
|
||||
RenderLocalLights 1 1
|
||||
RenderReflectionDetail 1 0
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
|
|
@ -242,7 +235,6 @@ RenderFlexTimeFactor 1 1.0
|
|||
RenderGlowResolutionPow 1 9
|
||||
RenderLocalLights 1 1
|
||||
RenderMaxPartCount 1 8192
|
||||
RenderReflectionDetail 1 4
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTransparentWater 1 1
|
||||
|
|
@ -281,7 +273,6 @@ RenderAvatarMaxComplexity 1 80000
|
|||
RenderLocalLights 1 0
|
||||
RenderMaxPartCount 1 1024
|
||||
RenderTerrainDetail 1 0
|
||||
RenderReflectionDetail 0 0
|
||||
RenderDeferredSSAO 0 0
|
||||
RenderUseAdvancedAtmospherics 0 0
|
||||
RenderShadowDetail 0 0
|
||||
|
|
|
|||
|
|
@ -164,7 +164,6 @@ BOOL FSFloaterPerformance::postBuild()
|
|||
|
||||
LLAvatarComplexityControls::setIndirectMaxArc();
|
||||
// store the current setting as the users desired reflection detail and DD
|
||||
gSavedSettings.setS32("FSUserTargetReflections", LLPipeline::RenderReflectionDetail);
|
||||
if(!FSPerfStats::tunables.userAutoTuneEnabled)
|
||||
{
|
||||
if (gSavedDrawDistance)
|
||||
|
|
|
|||
|
|
@ -79,7 +79,6 @@ namespace FSPerfStats
|
|||
if( tuningFlag & UserAutoTuneEnabled ){ gSavedSettings.setBOOL("FSAutoTuneFPS", userAutoTuneEnabled); };
|
||||
if( tuningFlag & UserAutoTuneLock ){ gSavedSettings.setBOOL("FSAutoTuneLock", userAutoTuneLock); };
|
||||
if( tuningFlag & UserTargetFPS ){ gSavedSettings.setU32("FSTargetFPS", userTargetFPS); };
|
||||
if( tuningFlag & UserTargetReflections ){ gSavedSettings.setS32("FSUserTargetReflections", userTargetReflections); };
|
||||
// Note: The Max ART slider is logarithmic and thus we have an intermediate proxy value
|
||||
if( tuningFlag & UserARTCutoff ){ gSavedSettings.setF32("FSRenderAvatarMaxART", userARTCutoffSliderValue); };
|
||||
resetChanges();
|
||||
|
|
@ -125,7 +124,6 @@ namespace FSPerfStats
|
|||
FSPerfStats::tunables.userImpostorDistanceTuningEnabled = gSavedSettings.getBOOL("FSAutoTuneImpostorByDistEnabled");
|
||||
FSPerfStats::tunables.userFPSTuningStrategy = gSavedSettings.getU32("FSTuningFPSStrategy");
|
||||
FSPerfStats::tunables.userTargetFPS = gSavedSettings.getU32("FSTargetFPS");
|
||||
FSPerfStats::tunables.userTargetReflections = gSavedSettings.getS32("FSUserTargetReflections");
|
||||
FSPerfStats::tunables.userAutoTuneEnabled = gSavedSettings.getBOOL("FSAutoTuneFPS");
|
||||
FSPerfStats::tunables.userAutoTuneLock = gSavedSettings.getBOOL("FSAutoTuneLock");
|
||||
// Note: The Max ART slider is logarithmic and thus we have an intermediate proxy value
|
||||
|
|
@ -378,25 +376,14 @@ namespace FSPerfStats
|
|||
{
|
||||
if(tunables.userFPSTuningStrategy == TUNE_SCENE_AND_AVATARS)
|
||||
{
|
||||
// 1 - hack the water to opaque. all non opaque have a significant hit, this is a big boost for (arguably) a minor visual hit.
|
||||
// the other reflection options make comparatively little change and if this overshoots we'll be stepping back up later
|
||||
if(LLPipeline::RenderReflectionDetail != -2)
|
||||
// step down the DD by 10m per update
|
||||
auto new_dd = (LLPipeline::RenderFarClip - DD_STEP > tunables.userMinDrawDistance)?(LLPipeline::RenderFarClip - DD_STEP) : tunables.userMinDrawDistance;
|
||||
if(new_dd != LLPipeline::RenderFarClip)
|
||||
{
|
||||
FSPerfStats::tunables.updateReflectionDetail(-2);
|
||||
FSPerfStats::tunables.updateFarClip( new_dd );
|
||||
FSPerfStats::lastGlobalPrefChange = gFrameCount;
|
||||
return;
|
||||
}
|
||||
else // deliberately "else" here so we only do one of these in any given frame
|
||||
{
|
||||
// step down the DD by 10m per update
|
||||
auto new_dd = (LLPipeline::RenderFarClip - DD_STEP > tunables.userMinDrawDistance)?(LLPipeline::RenderFarClip - DD_STEP) : tunables.userMinDrawDistance;
|
||||
if(new_dd != LLPipeline::RenderFarClip)
|
||||
{
|
||||
FSPerfStats::tunables.updateFarClip( new_dd );
|
||||
FSPerfStats::lastGlobalPrefChange = gFrameCount;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
// if we reach here, we've no more changes to make to tune scenery so we'll resort to agressive Avatar tuning
|
||||
// Note: moved from outside "if changefrequency elapsed" to stop fallthrough and allow scenery changes time to take effect.
|
||||
|
|
@ -471,11 +458,6 @@ namespace FSPerfStats
|
|||
FSPerfStats::lastGlobalPrefChange = gFrameCount;
|
||||
return;
|
||||
}
|
||||
if( (tot_frame_time_raw * 1.5) < target_frame_time_raw )
|
||||
{
|
||||
// if everything else is "max" and we have >50% headroom let's knock the water quality up a notch at a time.
|
||||
FSPerfStats::tunables.updateReflectionDetail( std::min(LLPipeline::RenderReflectionDetail + 1, tunables.userTargetReflections) );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -135,7 +135,6 @@ namespace FSPerfStats
|
|||
static constexpr U32 UserAutoTuneEnabled{256};
|
||||
static constexpr U32 UserTargetFPS{512};
|
||||
static constexpr U32 UserARTCutoff{1024};
|
||||
static constexpr U32 UserTargetReflections{2048};
|
||||
static constexpr U32 UserAutoTuneLock{4096};
|
||||
|
||||
U32 tuningFlag{0}; // bit mask for changed settings
|
||||
|
|
@ -153,7 +152,6 @@ namespace FSPerfStats
|
|||
bool userAutoTuneLock{true};
|
||||
U32 userTargetFPS{0};
|
||||
F32 userARTCutoffSliderValue{0};
|
||||
S32 userTargetReflections{0};
|
||||
|
||||
void updateNonImposters(U32 nv){nonImpostors=nv; tuningFlag |= NonImpostors;};
|
||||
void updateReflectionDetail(S32 nv){reflectionDetail=nv; tuningFlag |= ReflectionDetail;};
|
||||
|
|
@ -167,7 +165,6 @@ namespace FSPerfStats
|
|||
void updateUserARTCutoffSlider(F32 nv){userARTCutoffSliderValue=nv; tuningFlag |= UserARTCutoff;};
|
||||
void updateUserAutoTuneEnabled(bool nv){userAutoTuneEnabled=nv; tuningFlag |= UserAutoTuneEnabled;};
|
||||
void updateUserAutoTuneLock(bool nv){userAutoTuneLock=nv; tuningFlag |= UserAutoTuneLock;};
|
||||
void updateUserTargetReflections(S32 nv){userTargetReflections=nv; tuningFlag |= UserTargetReflections;};
|
||||
|
||||
void resetChanges(){tuningFlag=Nothing;};
|
||||
void initialiseFromSettings();
|
||||
|
|
|
|||
|
|
@ -2579,6 +2579,19 @@ bool LLAppViewer::initThreads()
|
|||
|
||||
LLLFSThread::initClass(enable_threads && true); // TODO: fix crashes associated with this shutdo
|
||||
|
||||
//auto configure thread count
|
||||
LLSD threadCounts = gSavedSettings.getLLSD("ThreadPoolSizes");
|
||||
|
||||
// get the number of concurrent threads that can run
|
||||
S32 cores = std::thread::hardware_concurrency();
|
||||
|
||||
// The only configurable thread count right now is ImageDecode
|
||||
// The viewer typically starts around 8 threads not including image decode,
|
||||
// so try to leave at least one core free
|
||||
S32 image_decode_count = llclamp(cores - 9, 1, 8);
|
||||
threadCounts["ImageDecode"] = image_decode_count;
|
||||
gSavedSettings.setLLSD("ThreadPoolSizes", threadCounts);
|
||||
|
||||
// Image decoding
|
||||
LLAppViewer::sImageDecodeThread = new LLImageDecodeThread(enable_threads && true);
|
||||
LLAppViewer::sTextureCache = new LLTextureCache(enable_threads && true);
|
||||
|
|
|
|||
|
|
@ -148,6 +148,11 @@ extern BOOL gCubeSnapshot;
|
|||
void LLDrawPoolAlpha::renderPostDeferred(S32 pass)
|
||||
{
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_DRAWPOOL;
|
||||
|
||||
if ((!LLPipeline::sRenderTransparentWater || gCubeSnapshot) && getType() == LLDrawPool::POOL_ALPHA_PRE_WATER)
|
||||
{ // don't render alpha objects on the other side of the water plane if water is opaque
|
||||
return;
|
||||
}
|
||||
deferred_render = TRUE;
|
||||
|
||||
F32 water_sign = 1.f;
|
||||
|
|
|
|||
|
|
@ -57,6 +57,8 @@ BOOL LLDrawPoolWater::sNeedsReflectionUpdate = TRUE;
|
|||
BOOL LLDrawPoolWater::sNeedsDistortionUpdate = TRUE;
|
||||
F32 LLDrawPoolWater::sWaterFogEnd = 0.f;
|
||||
|
||||
extern BOOL gCubeSnapshot;
|
||||
|
||||
LLDrawPoolWater::LLDrawPoolWater() : LLFacePool(POOL_WATER)
|
||||
{
|
||||
// <FS:Zi> Render speedup for water parameters
|
||||
|
|
@ -128,15 +130,19 @@ S32 LLDrawPoolWater::getNumPostDeferredPasses()
|
|||
|
||||
void LLDrawPoolWater::beginPostDeferredPass(S32 pass)
|
||||
{
|
||||
// copy framebuffer contents so far to a texture to be used for
|
||||
// reflections and refractions
|
||||
LLRenderTarget& src = gPipeline.mRT->screen;
|
||||
LLRenderTarget& dst = gPipeline.mWaterDis;
|
||||
dst.copyContents(src,
|
||||
0, 0, src.getWidth(), src.getHeight(),
|
||||
0, 0, dst.getWidth(), dst.getHeight(),
|
||||
GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT,
|
||||
GL_NEAREST);
|
||||
LL_PROFILE_GPU_ZONE("water beginPostDeferredPass")
|
||||
if (LLPipeline::sRenderTransparentWater && !gCubeSnapshot)
|
||||
{
|
||||
// copy framebuffer contents so far to a texture to be used for
|
||||
// reflections and refractions
|
||||
LLRenderTarget& src = gPipeline.mRT->screen;
|
||||
LLRenderTarget& dst = gPipeline.mWaterDis;
|
||||
dst.copyContents(src,
|
||||
0, 0, src.getWidth(), src.getHeight(),
|
||||
0, 0, dst.getWidth(), dst.getHeight(),
|
||||
GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT,
|
||||
GL_NEAREST);
|
||||
}
|
||||
}
|
||||
|
||||
void LLDrawPoolWater::renderPostDeferred(S32 pass)
|
||||
|
|
@ -155,6 +161,7 @@ S32 LLDrawPoolWater::getNumDeferredPasses()
|
|||
//===============================
|
||||
void LLDrawPoolWater::renderDeferred(S32 pass)
|
||||
{
|
||||
#if 0
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_DRAWPOOL; //LL_RECORD_BLOCK_TIME(FTM_RENDER_WATER);
|
||||
|
||||
if (!LLPipeline::sRenderTransparentWater)
|
||||
|
|
@ -167,6 +174,7 @@ void LLDrawPoolWater::renderDeferred(S32 pass)
|
|||
deferred_render = TRUE;
|
||||
renderWater();
|
||||
deferred_render = FALSE;
|
||||
#endif
|
||||
}
|
||||
|
||||
//=========================================
|
||||
|
|
@ -514,6 +522,8 @@ void LLDrawPoolWater::renderWater()
|
|||
//bool has_normal_mips = gSavedSettings.getBOOL("RenderWaterMipNormal");
|
||||
bool has_normal_mips = mRenderWaterMipNormal;
|
||||
bool underwater = LLViewerCamera::getInstance()->cameraUnderWater();
|
||||
LLColor4 fog_color = LLColor4(pwater->getWaterFogColor(), 0.f);
|
||||
LLColor3 fog_color_linear = linearColor3(fog_color);
|
||||
|
||||
if (sun_up)
|
||||
{
|
||||
|
|
@ -549,7 +559,7 @@ void LLDrawPoolWater::renderWater()
|
|||
for( int edge = 0 ; edge < 2; edge++ )
|
||||
{
|
||||
// select shader
|
||||
if (underwater && LLPipeline::sWaterReflections)
|
||||
if (underwater)
|
||||
{
|
||||
shader = deferred_render ? &gDeferredUnderWaterProgram : &gUnderWaterProgram;
|
||||
}
|
||||
|
|
@ -625,7 +635,6 @@ void LLDrawPoolWater::renderWater()
|
|||
shader->uniform2fv(LLShaderMgr::DEFERRED_SCREEN_RES, 1, screenRes);
|
||||
shader->uniform1f(LLShaderMgr::BLEND_FACTOR, blend_factor);
|
||||
|
||||
LLColor4 fog_color(pwater->getWaterFogColor(), 0.0f);
|
||||
F32 fog_density = pwater->getModifiedWaterFogDensity(underwater);
|
||||
|
||||
if (screentex > -1)
|
||||
|
|
@ -652,6 +661,7 @@ void LLDrawPoolWater::renderWater()
|
|||
|
||||
shader->uniform4fv(LLShaderMgr::SPECULAR_COLOR, 1, specular.mV);
|
||||
shader->uniform4fv(LLShaderMgr::WATER_FOGCOLOR, 1, fog_color.mV);
|
||||
shader->uniform3fv(LLShaderMgr::WATER_FOGCOLOR_LINEAR, 1, fog_color_linear.mV);
|
||||
|
||||
shader->uniform3fv(LLShaderMgr::WATER_SPECULAR, 1, light_diffuse.mV);
|
||||
shader->uniform1f(LLShaderMgr::WATER_SPECULAR_EXP, light_exp);
|
||||
|
|
|
|||
|
|
@ -2124,12 +2124,6 @@ void LLFloaterPreference::refreshEnabledState()
|
|||
fsaa_ctrl->setValue((LLSD::Integer) 0);
|
||||
}
|
||||
|
||||
LLComboBox* ctrl_reflections = getChild<LLComboBox>("Reflections");
|
||||
|
||||
// Reflections
|
||||
BOOL reflections = LLCubeMap::sUseCubeMaps;
|
||||
ctrl_reflections->setEnabled(reflections);
|
||||
|
||||
// WindLight
|
||||
LLSliderCtrl* sky = getChild<LLSliderCtrl>("SkyMeshDetail");
|
||||
sky->setEnabled(TRUE);
|
||||
|
|
@ -2220,30 +2214,22 @@ void LLAvatarComplexityControls::setIndirectMaxArc()
|
|||
|
||||
void LLFloaterPreference::disableUnavailableSettings()
|
||||
{
|
||||
LLComboBox* ctrl_reflections = getChild<LLComboBox>("Reflections");
|
||||
LLComboBox* ctrl_shadows = getChild<LLComboBox>("ShadowDetail");
|
||||
LLCheckBoxCtrl* ctrl_ssao = getChild<LLCheckBoxCtrl>("UseSSAO");
|
||||
|
||||
// disabled deferred SSAO
|
||||
if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferredSSAO"))
|
||||
{
|
||||
ctrl_ssao->setEnabled(FALSE);
|
||||
ctrl_ssao->setEnabled(FALSE);
|
||||
ctrl_ssao->setValue(FALSE);
|
||||
}
|
||||
|
||||
// disabled deferred shadows
|
||||
if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderShadowDetail"))
|
||||
{
|
||||
ctrl_shadows->setEnabled(FALSE);
|
||||
ctrl_shadows->setValue(0);
|
||||
}
|
||||
|
||||
// disabled reflections
|
||||
if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderReflectionDetail"))
|
||||
{
|
||||
ctrl_reflections->setEnabled(FALSE);
|
||||
ctrl_reflections->setValue(FALSE);
|
||||
}
|
||||
if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderShadowDetail"))
|
||||
{
|
||||
ctrl_shadows->setEnabled(FALSE);
|
||||
ctrl_shadows->setValue(0);
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterPreference::refresh()
|
||||
|
|
|
|||
|
|
@ -119,10 +119,23 @@ std::string USE_TEXTURE;
|
|||
|
||||
LLRender::eTexIndex LLPanelFace::getTextureChannelToEdit()
|
||||
{
|
||||
LLRadioGroup* radio_mat_type = getChild<LLRadioGroup>("radio_material_type");
|
||||
|
||||
LLRender::eTexIndex channel_to_edit = (mComboMatMedia && mComboMatMedia->getCurrentIndex() == MATMEDIA_MATERIAL) ?
|
||||
(radio_mat_type ? (LLRender::eTexIndex)radio_mat_type->getSelectedIndex() : LLRender::DIFFUSE_MAP) : LLRender::DIFFUSE_MAP;
|
||||
|
||||
LLRender::eTexIndex channel_to_edit = LLRender::DIFFUSE_MAP;
|
||||
if (mComboMatMedia)
|
||||
{
|
||||
U32 matmedia_selection = mComboMatMedia->getCurrentIndex();
|
||||
if (matmedia_selection == MATMEDIA_MATERIAL)
|
||||
{
|
||||
LLRadioGroup* radio_mat_type = getChild<LLRadioGroup>("radio_material_type");
|
||||
channel_to_edit = (LLRender::eTexIndex)radio_mat_type->getSelectedIndex();
|
||||
}
|
||||
if (matmedia_selection == MATMEDIA_PBR)
|
||||
{
|
||||
LLRadioGroup* radio_mat_type = getChild<LLRadioGroup>("radio_pbr_type");
|
||||
channel_to_edit = (LLRender::eTexIndex)radio_mat_type->getSelectedIndex();
|
||||
}
|
||||
}
|
||||
|
||||
channel_to_edit = (channel_to_edit == LLRender::NORMAL_MAP) ? (getCurrentNormalMap().isNull() ? LLRender::DIFFUSE_MAP : channel_to_edit) : channel_to_edit;
|
||||
channel_to_edit = (channel_to_edit == LLRender::SPECULAR_MAP) ? (getCurrentSpecularMap().isNull() ? LLRender::DIFFUSE_MAP : channel_to_edit) : channel_to_edit;
|
||||
|
|
@ -629,20 +642,42 @@ struct LLPanelFaceSetTEFunctor : public LLSelectedTEFunctor
|
|||
{
|
||||
BOOL valid;
|
||||
F32 value;
|
||||
|
||||
LLRadioGroup * radio_mat_type = mPanel->getChild<LLRadioGroup>("radio_material_type");
|
||||
std::string prefix;
|
||||
switch (radio_mat_type->getSelectedIndex())
|
||||
U32 materials_media = mPanel->getChild<LLComboBox>("combobox matmedia")->getCurrentIndex();
|
||||
|
||||
if (MATMEDIA_PBR == materials_media)
|
||||
{
|
||||
case MATTYPE_DIFFUSE:
|
||||
prefix = "Tex";
|
||||
break;
|
||||
case MATTYPE_NORMAL:
|
||||
prefix = "bumpy";
|
||||
break;
|
||||
case MATTYPE_SPECULAR:
|
||||
prefix = "shiny";
|
||||
break;
|
||||
LLRadioGroup * radio_pbr_type = mPanel->getChild<LLRadioGroup>("radio_pbr_type");
|
||||
switch (radio_pbr_type->getSelectedIndex())
|
||||
{
|
||||
case PBRTYPE_BASE_COLOR:
|
||||
prefix = "Tex";
|
||||
break;
|
||||
case PBRTYPE_NORMAL:
|
||||
prefix = "bumpy";
|
||||
break;
|
||||
case PBRTYPE_METALLIC:
|
||||
prefix = "shiny";
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Effectively the same as MATMEDIA_PBR sans using different radio,
|
||||
// separate for the sake of clarity
|
||||
LLRadioGroup * radio_mat_type = mPanel->getChild<LLRadioGroup>("radio_material_type");
|
||||
switch (radio_mat_type->getSelectedIndex())
|
||||
{
|
||||
case MATTYPE_DIFFUSE:
|
||||
prefix = "Tex";
|
||||
break;
|
||||
case MATTYPE_NORMAL:
|
||||
prefix = "bumpy";
|
||||
break;
|
||||
case MATTYPE_SPECULAR:
|
||||
prefix = "shiny";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
LLSpinCtrl * ctrlTexScaleS = mPanel->getChild<LLSpinCtrl>(prefix + "ScaleU");
|
||||
|
|
@ -3626,11 +3661,20 @@ void LLPanelFace::onCommitRepeatsPerMeter(LLUICtrl* ctrl, void* userdata)
|
|||
LLPanelFace* self = (LLPanelFace*) userdata;
|
||||
|
||||
LLUICtrl* repeats_ctrl = self->getChild<LLUICtrl>("rptctrl");
|
||||
LLRadioGroup* radio_mat_type = self->getChild<LLRadioGroup>("radio_material_type");
|
||||
|
||||
U32 materials_media = self->mComboMatMedia->getCurrentIndex();
|
||||
U32 material_type = 0;
|
||||
if (materials_media == MATMEDIA_PBR)
|
||||
{
|
||||
LLRadioGroup* radio_mat_type = self->getChild<LLRadioGroup>("radio_pbr_type");
|
||||
material_type = radio_mat_type->getSelectedIndex();
|
||||
}
|
||||
if (materials_media == MATMEDIA_MATERIAL)
|
||||
{
|
||||
LLRadioGroup* radio_mat_type = self->getChild<LLRadioGroup>("radio_material_type");
|
||||
material_type = radio_mat_type->getSelectedIndex();
|
||||
}
|
||||
|
||||
U32 material_type = (materials_media == MATMEDIA_MATERIAL) ? radio_mat_type->getSelectedIndex() : 0;
|
||||
F32 repeats_per_meter = repeats_ctrl->getValue().asReal();
|
||||
|
||||
F32 obj_scale_s = 1.0f;
|
||||
|
|
|
|||
|
|
@ -965,9 +965,11 @@ void LLSettingsVOWater::applySpecial(void *ptarget, bool force)
|
|||
F32 waterFogDensity = env.getCurrentWater()->getModifiedWaterFogDensity(underwater);
|
||||
shader->uniform1f(LLShaderMgr::WATER_FOGDENSITY, waterFogDensity);
|
||||
|
||||
LLColor4 fog_color(env.getCurrentWater()->getWaterFogColor(), 0.0f);
|
||||
LLColor4 fog_color(env.getCurrentWater()->getWaterFogColor());
|
||||
shader->uniform4fv(LLShaderMgr::WATER_FOGCOLOR, fog_color.mV);
|
||||
|
||||
shader->uniform3fv(LLShaderMgr::WATER_FOGCOLOR_LINEAR, linearColor3(fog_color).mV);
|
||||
|
||||
F32 blend_factor = env.getCurrentWater()->getBlendFactor();
|
||||
shader->uniform1f(LLShaderMgr::BLEND_FACTOR, blend_factor);
|
||||
|
||||
|
|
|
|||
|
|
@ -1117,12 +1117,6 @@ void handleUserTargetDrawDistanceChanged(const LLSD& newValue)
|
|||
FSPerfStats::tunables.userTargetDrawDistance = newval;
|
||||
}
|
||||
|
||||
void handleUserTargetReflectionsChanged(const LLSD& newValue)
|
||||
{
|
||||
const auto newval = gSavedSettings.getS32("FSUserTargetReflections");
|
||||
FSPerfStats::tunables.userTargetReflections = newval;
|
||||
}
|
||||
|
||||
void handlePerformanceStatsEnabledChanged(const LLSD& newValue)
|
||||
{
|
||||
const auto newval = gSavedSettings.getBOOL("FSPerfStatsCaptureEnabled");
|
||||
|
|
@ -1413,7 +1407,6 @@ void settings_setup_listeners()
|
|||
gSavedSettings.getControl("FSAutoTuneLock")->getSignal()->connect(boost::bind(&handleAutoTuneLockChanged, _2));
|
||||
gSavedSettings.getControl("FSRenderAvatarMaxART")->getSignal()->connect(boost::bind(&handleRenderAvatarMaxARTChanged, _2));
|
||||
gSavedSettings.getControl("FSPerfStatsCaptureEnabled")->getSignal()->connect(boost::bind(&handlePerformanceStatsEnabledChanged, _2));
|
||||
gSavedSettings.getControl("FSUserTargetReflections")->getSignal()->connect(boost::bind(&handleUserTargetReflectionsChanged, _2));
|
||||
gSavedSettings.getControl("FSAutoTuneRenderFarClipTarget")->getSignal()->connect(boost::bind(&handleUserTargetDrawDistanceChanged, _2));
|
||||
gSavedSettings.getControl("FSAutoTuneImpostorFarAwayDistance")->getSignal()->connect(boost::bind(&handleUserImpostorDistanceChanged, _2));
|
||||
gSavedSettings.getControl("FSAutoTuneImpostorByDistEnabled")->getSignal()->connect(boost::bind(&handleUserImpostorByDistEnabledChanged, _2));
|
||||
|
|
|
|||
|
|
@ -906,7 +906,6 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
|
|||
{
|
||||
LL_PROFILE_ZONE_NAMED_CATEGORY_DISPLAY("display - 3")
|
||||
LLAppViewer::instance()->pingMainloopTimeout("Display:Imagery");
|
||||
gPipeline.generateWaterReflection(camera); // <FS:Ansariel> Factor out calls to getInstance
|
||||
gPipeline.generateHighlight(camera); // <FS:Ansariel> Factor out calls to getInstance
|
||||
gPipeline.renderPhysicsDisplay();
|
||||
}
|
||||
|
|
@ -1393,7 +1392,7 @@ void render_hud_attachments()
|
|||
|
||||
gPipeline.stateSort(hud_cam, result);
|
||||
|
||||
gPipeline.renderGeom(hud_cam);
|
||||
gPipeline.renderGeomPostDeferred(hud_cam);
|
||||
|
||||
LLSpatialGroup::sNoDelete = FALSE;
|
||||
//gPipeline.clearReferences();
|
||||
|
|
|
|||
|
|
@ -470,7 +470,6 @@ void LLViewerShaderMgr::setShaders()
|
|||
initAttribsAndUniforms();
|
||||
gPipeline.releaseGLBuffers();
|
||||
|
||||
LLPipeline::sWaterReflections = LLPipeline::sRenderTransparentWater;
|
||||
LLPipeline::sRenderGlow = gSavedSettings.getBOOL("RenderGlow");
|
||||
LLPipeline::updateRenderDeferred();
|
||||
|
||||
|
|
@ -1037,6 +1036,11 @@ BOOL LLViewerShaderMgr::loadShadersWater()
|
|||
gWaterProgram.mShaderFiles.clear();
|
||||
gWaterProgram.mShaderFiles.push_back(make_pair("environment/waterV.glsl", GL_VERTEX_SHADER));
|
||||
gWaterProgram.mShaderFiles.push_back(make_pair("environment/waterF.glsl", GL_FRAGMENT_SHADER));
|
||||
gWaterProgram.clearPermutations();
|
||||
if (LLPipeline::sRenderTransparentWater)
|
||||
{
|
||||
gWaterProgram.addPermutation("TRANSPARENT_WATER", "1");
|
||||
}
|
||||
gWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER;
|
||||
gWaterProgram.mShaderLevel = mShaderLevel[SHADER_WATER];
|
||||
success = gWaterProgram.createShader(NULL, NULL);
|
||||
|
|
@ -1058,6 +1062,11 @@ BOOL LLViewerShaderMgr::loadShadersWater()
|
|||
gWaterEdgeProgram.mShaderFiles.push_back(make_pair("environment/waterV.glsl", GL_VERTEX_SHADER));
|
||||
gWaterEdgeProgram.mShaderFiles.push_back(make_pair("environment/waterF.glsl", GL_FRAGMENT_SHADER));
|
||||
gWaterEdgeProgram.addPermutation("WATER_EDGE", "1");
|
||||
gWaterEdgeProgram.clearPermutations();
|
||||
if (LLPipeline::sRenderTransparentWater)
|
||||
{
|
||||
gWaterEdgeProgram.addPermutation("TRANSPARENT_WATER", "1");
|
||||
}
|
||||
gWaterEdgeProgram.mShaderGroup = LLGLSLShader::SG_WATER;
|
||||
gWaterEdgeProgram.mShaderLevel = mShaderLevel[SHADER_WATER];
|
||||
success = gWaterEdgeProgram.createShader(NULL, NULL);
|
||||
|
|
@ -1075,6 +1084,11 @@ BOOL LLViewerShaderMgr::loadShadersWater()
|
|||
gUnderWaterProgram.mShaderFiles.push_back(make_pair("environment/underWaterF.glsl", GL_FRAGMENT_SHADER));
|
||||
gUnderWaterProgram.mShaderLevel = mShaderLevel[SHADER_WATER];
|
||||
gUnderWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER;
|
||||
gUnderWaterProgram.clearPermutations();
|
||||
if (LLPipeline::sRenderTransparentWater)
|
||||
{
|
||||
gUnderWaterProgram.addPermutation("TRANSPARENT_WATER", "1");
|
||||
}
|
||||
success = gUnderWaterProgram.createShader(NULL, NULL);
|
||||
llassert(success);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6384,7 +6384,7 @@ BOOL LLViewerWindow::simpleSnapshot(LLImageRaw* raw, S32 image_width, S32 image_
|
|||
LLRenderTarget scratch_space;
|
||||
U32 color_fmt = GL_RGBA;
|
||||
const bool use_depth_buffer = true;
|
||||
const bool use_stencil_buffer = true;
|
||||
const bool use_stencil_buffer = false;
|
||||
if (scratch_space.allocate(image_width, image_height, color_fmt, use_depth_buffer, use_stencil_buffer))
|
||||
{
|
||||
if (gPipeline.allocateScreenBuffer(image_width, image_height))
|
||||
|
|
|
|||
|
|
@ -221,7 +221,6 @@ F32 LLPipeline::RenderEdgeNormCutoff;
|
|||
LLVector3 LLPipeline::RenderShadowGaussian;
|
||||
F32 LLPipeline::RenderShadowBlurDistFactor;
|
||||
bool LLPipeline::RenderDeferredAtmospheric;
|
||||
S32 LLPipeline::RenderReflectionDetail;
|
||||
F32 LLPipeline::RenderHighlightFadeTime;
|
||||
LLVector3 LLPipeline::RenderShadowClipPlanes;
|
||||
LLVector3 LLPipeline::RenderShadowOrthoClipPlanes;
|
||||
|
|
@ -334,7 +333,6 @@ bool LLPipeline::sNoAlpha = false;
|
|||
bool LLPipeline::sUseTriStrips = true;
|
||||
bool LLPipeline::sUseFarClip = true;
|
||||
bool LLPipeline::sShadowRender = false;
|
||||
bool LLPipeline::sWaterReflections = false;
|
||||
bool LLPipeline::sRenderGlow = false;
|
||||
bool LLPipeline::sReflectionRender = false;
|
||||
bool LLPipeline::sDistortionRender = false;
|
||||
|
|
@ -625,7 +623,6 @@ void LLPipeline::init()
|
|||
connectRefreshCachedSettingsSafe("RenderShadowGaussian");
|
||||
connectRefreshCachedSettingsSafe("RenderShadowBlurDistFactor");
|
||||
connectRefreshCachedSettingsSafe("RenderDeferredAtmospheric");
|
||||
connectRefreshCachedSettingsSafe("RenderReflectionDetail");
|
||||
connectRefreshCachedSettingsSafe("RenderHighlightFadeTime");
|
||||
connectRefreshCachedSettingsSafe("RenderShadowClipPlanes");
|
||||
connectRefreshCachedSettingsSafe("RenderShadowOrthoClipPlanes");
|
||||
|
|
@ -1220,7 +1217,6 @@ void LLPipeline::refreshCachedSettings()
|
|||
RenderShadowGaussian = gSavedSettings.getVector3("RenderShadowGaussian");
|
||||
RenderShadowBlurDistFactor = gSavedSettings.getF32("RenderShadowBlurDistFactor");
|
||||
RenderDeferredAtmospheric = gSavedSettings.getBOOL("RenderDeferredAtmospheric");
|
||||
RenderReflectionDetail = gSavedSettings.getS32("RenderReflectionDetail");
|
||||
RenderHighlightFadeTime = gSavedSettings.getF32("RenderHighlightFadeTime");
|
||||
RenderShadowClipPlanes = gSavedSettings.getVector3("RenderShadowClipPlanes");
|
||||
RenderShadowOrthoClipPlanes = gSavedSettings.getVector3("RenderShadowOrthoClipPlanes");
|
||||
|
|
@ -1343,10 +1339,9 @@ void LLPipeline::createGLBuffers()
|
|||
assertInitialized();
|
||||
|
||||
updateRenderDeferred();
|
||||
if (LLPipeline::sWaterReflections)
|
||||
if (LLPipeline::sRenderTransparentWater)
|
||||
{ //water reflection texture
|
||||
U32 res = (U32) llmax(gSavedSettings.getS32("RenderWaterRefResolution"), 512);
|
||||
mWaterRef.allocate(res,res,GL_RGBA,TRUE,FALSE);
|
||||
mWaterDis.allocate(res,res,GL_RGBA,TRUE,FALSE,LLTexUnit::TT_TEXTURE);
|
||||
}
|
||||
|
||||
|
|
@ -2592,17 +2587,6 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, LLPlane* pla
|
|||
stop_glerror();
|
||||
}
|
||||
|
||||
if (hasRenderType(LLPipeline::RENDER_TYPE_GROUND) &&
|
||||
!gPipeline.canUseWindLightShaders() &&
|
||||
gSky.mVOGroundp.notNull() &&
|
||||
gSky.mVOGroundp->mDrawable.notNull() &&
|
||||
!LLPipeline::sWaterReflections)
|
||||
{
|
||||
gSky.mVOGroundp->mDrawable->setVisible(camera);
|
||||
sCull->pushDrawable(gSky.mVOGroundp->mDrawable);
|
||||
}
|
||||
|
||||
|
||||
if (hasRenderType(LLPipeline::RENDER_TYPE_WL_SKY) &&
|
||||
gPipeline.canUseWindLightShaders() &&
|
||||
gSky.mVOWLSkyp.notNull() &&
|
||||
|
|
@ -9698,350 +9682,6 @@ inline float sgn(float a)
|
|||
return (0.0F);
|
||||
}
|
||||
|
||||
void LLPipeline::generateWaterReflection(LLCamera& camera_in)
|
||||
{
|
||||
#if 0
|
||||
LL_PROFILE_ZONE_SCOPED_CATEGORY_PIPELINE;
|
||||
LL_PROFILE_GPU_ZONE("generateWaterReflection");
|
||||
|
||||
if (!assertInitialized() || gCubeSnapshot)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (LLPipeline::sWaterReflections && LLDrawPoolWater::sNeedsReflectionUpdate)
|
||||
{
|
||||
//disable occlusion culling for reflection/refraction passes (save setting to restore later)
|
||||
S32 occlude = LLPipeline::sUseOcclusion;
|
||||
LLPipeline::sUseOcclusion = 0;
|
||||
|
||||
bool skip_avatar_update = false;
|
||||
if (!isAgentAvatarValid() || gAgentCamera.getCameraAnimating() || gAgentCamera.getCameraMode() != CAMERA_MODE_MOUSELOOK || !LLVOAvatar::sVisibleInFirstPerson)
|
||||
{
|
||||
skip_avatar_update = true;
|
||||
}
|
||||
|
||||
LLCamera camera = camera_in;
|
||||
camera.setFar(camera_in.getFar() * 0.75f);
|
||||
|
||||
bool camera_is_underwater = LLViewerCamera::getInstance()->cameraUnderWater();
|
||||
|
||||
LLPipeline::sReflectionRender = true;
|
||||
|
||||
gPipeline.pushRenderTypeMask();
|
||||
|
||||
glh::matrix4f saved_modelview = get_current_modelview();
|
||||
glh::matrix4f saved_projection = get_current_projection();
|
||||
glh::matrix4f mat;
|
||||
|
||||
#if 1 // relies on forward rendering, which is deprecated -- TODO - make a deferred implementation of transparent/reflective water
|
||||
S32 reflection_detail = RenderReflectionDetail;
|
||||
#else
|
||||
S32 reflection_detail = WATER_REFLECT_NONE_WATER_TRANSPARENT;
|
||||
#endif
|
||||
|
||||
F32 water_height = gAgent.getRegion()->getWaterHeight();
|
||||
F32 camera_height = camera_in.getOrigin().mV[VZ];
|
||||
F32 distance_to_water = (water_height < camera_height) ? (camera_height - water_height) : (water_height - camera_height);
|
||||
|
||||
LLVector3 reflection_offset = LLVector3(0, 0, distance_to_water * 2.0f);
|
||||
LLVector3 camera_look_at = camera_in.getAtAxis();
|
||||
LLVector3 reflection_look_at = LLVector3(camera_look_at.mV[VX], camera_look_at.mV[VY], -camera_look_at.mV[VZ]);
|
||||
LLVector3 reflect_origin = camera_in.getOrigin() - reflection_offset;
|
||||
LLVector3 reflect_interest_point = reflect_origin + (reflection_look_at * 5.0f);
|
||||
|
||||
camera.setOriginAndLookAt(reflect_origin, LLVector3::z_axis, reflect_interest_point);
|
||||
|
||||
//plane params
|
||||
LLPlane plane;
|
||||
LLVector3 pnorm;
|
||||
|
||||
if (camera_is_underwater)
|
||||
{
|
||||
//camera is below water, cull above water
|
||||
pnorm.setVec(0, 0, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
//camera is above water, cull below water
|
||||
pnorm = LLVector3(0, 0, -1);
|
||||
}
|
||||
|
||||
plane.setVec(LLVector3(0, 0, water_height), pnorm);
|
||||
|
||||
if (!camera_is_underwater)
|
||||
{
|
||||
//generate planar reflection map
|
||||
LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_WATER0;
|
||||
|
||||
gGL.matrixMode(LLRender::MM_MODELVIEW);
|
||||
gGL.pushMatrix();
|
||||
|
||||
mat.set_scale(glh::vec3f(1, 1, -1));
|
||||
mat.set_translate(glh::vec3f(0,0,water_height*2.f));
|
||||
mat = saved_modelview * mat;
|
||||
|
||||
|
||||
mReflectionModelView = mat;
|
||||
|
||||
set_current_modelview(mat);
|
||||
gGL.loadMatrix(mat.m);
|
||||
|
||||
LLViewerCamera::updateFrustumPlanes(camera, FALSE, TRUE);
|
||||
|
||||
glh::vec3f origin(0, 0, 0);
|
||||
glh::matrix4f inv_mat = mat.inverse();
|
||||
inv_mat.mult_matrix_vec(origin);
|
||||
|
||||
camera.setOrigin(origin.v);
|
||||
|
||||
glCullFace(GL_FRONT);
|
||||
|
||||
if (LLDrawPoolWater::sNeedsReflectionUpdate)
|
||||
{
|
||||
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
glClearColor(0,0,0,0);
|
||||
mWaterRef.bindTarget();
|
||||
|
||||
gGL.setColorMask(true, true);
|
||||
mWaterRef.clear();
|
||||
gGL.setColorMask(true, false);
|
||||
mWaterRef.getViewport(gGLViewport);
|
||||
|
||||
//initial sky pass (no user clip plane)
|
||||
//mask out everything but the sky
|
||||
gPipeline.pushRenderTypeMask();
|
||||
{
|
||||
if (reflection_detail >= WATER_REFLECT_MINIMAL)
|
||||
{
|
||||
gPipeline.andRenderTypeMask(
|
||||
LLPipeline::RENDER_TYPE_SKY,
|
||||
LLPipeline::RENDER_TYPE_WL_SKY,
|
||||
LLPipeline::RENDER_TYPE_CLOUDS,
|
||||
LLPipeline::END_RENDER_TYPES);
|
||||
}
|
||||
else
|
||||
{
|
||||
gPipeline.andRenderTypeMask(
|
||||
LLPipeline::RENDER_TYPE_SKY,
|
||||
LLPipeline::RENDER_TYPE_WL_SKY,
|
||||
LLPipeline::END_RENDER_TYPES);
|
||||
}
|
||||
|
||||
updateCull(camera, mSky);
|
||||
stateSort(camera, mSky);
|
||||
renderGeom(camera, TRUE);
|
||||
}
|
||||
gPipeline.popRenderTypeMask();
|
||||
|
||||
if (reflection_detail >= WATER_REFLECT_NONE_WATER_TRANSPARENT)
|
||||
{
|
||||
gPipeline.pushRenderTypeMask();
|
||||
{
|
||||
clearRenderTypeMask(
|
||||
LLPipeline::RENDER_TYPE_WATER,
|
||||
LLPipeline::RENDER_TYPE_VOIDWATER,
|
||||
LLPipeline::RENDER_TYPE_GROUND,
|
||||
LLPipeline::RENDER_TYPE_SKY,
|
||||
LLPipeline::RENDER_TYPE_CLOUDS,
|
||||
LLPipeline::END_RENDER_TYPES);
|
||||
|
||||
if (reflection_detail > WATER_REFLECT_MINIMAL)
|
||||
{ //mask out selected geometry based on reflection detail
|
||||
if (reflection_detail < WATER_REFLECT_EVERYTHING)
|
||||
{
|
||||
clearRenderTypeMask(LLPipeline::RENDER_TYPE_PARTICLES, END_RENDER_TYPES);
|
||||
if (reflection_detail < WATER_REFLECT_AVATARS)
|
||||
{
|
||||
clearRenderTypeMask(
|
||||
LLPipeline::RENDER_TYPE_AVATAR,
|
||||
LLPipeline::RENDER_TYPE_CONTROL_AV,
|
||||
END_RENDER_TYPES);
|
||||
if (reflection_detail < WATER_REFLECT_STATIC_OBJECTS)
|
||||
{
|
||||
clearRenderTypeMask(LLPipeline::RENDER_TYPE_VOLUME, END_RENDER_TYPES);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LLGLUserClipPlane clip_plane(plane, mReflectionModelView, saved_projection);
|
||||
LLGLDisable cull(GL_CULL_FACE);
|
||||
updateCull(camera, mReflectedObjects, &plane);
|
||||
stateSort(camera, mReflectedObjects);
|
||||
renderGeom(camera);
|
||||
}
|
||||
}
|
||||
gPipeline.popRenderTypeMask();
|
||||
}
|
||||
|
||||
mWaterRef.flush();
|
||||
}
|
||||
|
||||
glCullFace(GL_BACK);
|
||||
gGL.matrixMode(LLRender::MM_MODELVIEW);
|
||||
gGL.popMatrix();
|
||||
|
||||
set_current_modelview(saved_modelview);
|
||||
}
|
||||
|
||||
camera.setOrigin(camera_in.getOrigin());
|
||||
//render distortion map
|
||||
static bool last_update = true;
|
||||
if (last_update)
|
||||
{
|
||||
gPipeline.pushRenderTypeMask();
|
||||
|
||||
camera.setFar(camera_in.getFar());
|
||||
clearRenderTypeMask(
|
||||
LLPipeline::RENDER_TYPE_WATER,
|
||||
LLPipeline::RENDER_TYPE_VOIDWATER,
|
||||
LLPipeline::RENDER_TYPE_GROUND,
|
||||
END_RENDER_TYPES);
|
||||
|
||||
// intentionally inverted so that distortion map contents (objects under the water when we're above it)
|
||||
// will properly include water fog effects
|
||||
LLPipeline::sUnderWaterRender = !camera_is_underwater;
|
||||
|
||||
if (LLPipeline::sUnderWaterRender)
|
||||
{
|
||||
clearRenderTypeMask(
|
||||
LLPipeline::RENDER_TYPE_GROUND,
|
||||
LLPipeline::RENDER_TYPE_SKY,
|
||||
LLPipeline::RENDER_TYPE_CLOUDS,
|
||||
LLPipeline::RENDER_TYPE_WL_SKY,
|
||||
END_RENDER_TYPES);
|
||||
}
|
||||
LLViewerCamera::updateFrustumPlanes(camera);
|
||||
|
||||
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
|
||||
if (LLPipeline::sUnderWaterRender || LLDrawPoolWater::sNeedsDistortionUpdate)
|
||||
{
|
||||
LLPipeline::sDistortionRender = true;
|
||||
|
||||
LLColor3 col = LLEnvironment::instance().getCurrentWater()->getWaterFogColor();
|
||||
glClearColor(col.mV[0], col.mV[1], col.mV[2], 0.f);
|
||||
|
||||
// HACK FIX -- pretend underwater camera is the world camera to fix weird visibility artifacts
|
||||
// during distortion render (doesn't break main render because the camera is the same perspective
|
||||
// as world camera and occlusion culling is disabled for this pass)
|
||||
//LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_WATER1;
|
||||
LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_WORLD;
|
||||
|
||||
mWaterDis.bindTarget();
|
||||
mWaterDis.getViewport(gGLViewport);
|
||||
|
||||
gGL.setColorMask(true, true);
|
||||
mWaterDis.clear();
|
||||
gGL.setColorMask(true, false);
|
||||
|
||||
F32 water_dist = water_height;
|
||||
|
||||
//clip out geometry on the same side of water as the camera w/ enough margin to not include the water geo itself,
|
||||
// but not so much as to clip out parts of avatars that should be seen under the water in the distortion map
|
||||
LLPlane plane;
|
||||
|
||||
if (camera_is_underwater)
|
||||
{
|
||||
//nudge clip plane below water to avoid visible holes in objects intersecting water surface
|
||||
water_dist /= LLPipeline::sDistortionWaterClipPlaneMargin;
|
||||
//camera is below water, clip plane points up
|
||||
pnorm.setVec(0, 0, -1);
|
||||
}
|
||||
else
|
||||
{
|
||||
//nudge clip plane above water to avoid visible holes in objects intersecting water surface
|
||||
water_dist *= LLPipeline::sDistortionWaterClipPlaneMargin;
|
||||
//camera is above water, clip plane points down
|
||||
pnorm = LLVector3(0, 0, 1);
|
||||
}
|
||||
|
||||
plane.setVec(LLVector3(0, 0, water_dist), pnorm);
|
||||
|
||||
LLGLUserClipPlane clip_plane(plane, saved_modelview, saved_projection);
|
||||
|
||||
gGL.setColorMask(true, true);
|
||||
mWaterDis.clear();
|
||||
gGL.setColorMask(true, false);
|
||||
|
||||
#if 0 // DEPRECATED - requires forward rendering, TODO - make a deferred implementation
|
||||
if (reflection_detail >= WATER_REFLECT_NONE_WATER_TRANSPARENT)
|
||||
{
|
||||
updateCull(camera, mRefractedObjects, &plane);
|
||||
stateSort(camera, mRefractedObjects);
|
||||
renderGeom(camera);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
gUIProgram.bind();
|
||||
|
||||
LLWorld::getInstance()->renderPropertyLines();
|
||||
|
||||
gUIProgram.unbind();
|
||||
|
||||
mWaterDis.flush();
|
||||
}
|
||||
|
||||
LLPipeline::sDistortionRender = false;
|
||||
|
||||
gPipeline.popRenderTypeMask();
|
||||
}
|
||||
last_update = LLDrawPoolWater::sNeedsReflectionUpdate && LLDrawPoolWater::sNeedsDistortionUpdate;
|
||||
|
||||
gPipeline.popRenderTypeMask();
|
||||
|
||||
LLPipeline::sUnderWaterRender = false;
|
||||
LLPipeline::sReflectionRender = false;
|
||||
|
||||
LLDrawPoolWater::sNeedsReflectionUpdate = FALSE;
|
||||
LLDrawPoolWater::sNeedsDistortionUpdate = FALSE;
|
||||
|
||||
if (!LLRenderTarget::sUseFBO)
|
||||
{
|
||||
glClear(GL_DEPTH_BUFFER_BIT);
|
||||
}
|
||||
glClearColor(0.f, 0.f, 0.f, 0.f);
|
||||
gViewerWindow->setup3DViewport();
|
||||
|
||||
LLGLState::checkStates();
|
||||
|
||||
if (!skip_avatar_update)
|
||||
{
|
||||
gAgentAvatarp->updateAttachmentVisibility(gAgentCamera.getCameraMode());
|
||||
}
|
||||
|
||||
LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_WORLD;
|
||||
|
||||
// restore occlusion culling
|
||||
LLPipeline::sUseOcclusion = occlude;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Initial sky pass is still needed even if water reflection is not rendering
|
||||
bool camera_is_underwater = LLViewerCamera::getInstance()->cameraUnderWater();
|
||||
if (!camera_is_underwater)
|
||||
{
|
||||
gPipeline.pushRenderTypeMask();
|
||||
{
|
||||
gPipeline.andRenderTypeMask(
|
||||
LLPipeline::RENDER_TYPE_SKY,
|
||||
LLPipeline::RENDER_TYPE_WL_SKY,
|
||||
LLPipeline::END_RENDER_TYPES);
|
||||
|
||||
LLCamera camera = camera_in;
|
||||
camera.setFar(camera_in.getFar() * 0.75f);
|
||||
|
||||
updateCull(camera, mSky);
|
||||
stateSort(camera, mSky);
|
||||
renderGeom(camera, TRUE);
|
||||
}
|
||||
gPipeline.popRenderTypeMask();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
glh::matrix4f look(const LLVector3 pos, const LLVector3 dir, const LLVector3 up)
|
||||
{
|
||||
glh::matrix4f ret;
|
||||
|
|
|
|||
|
|
@ -309,7 +309,6 @@ public:
|
|||
void renderDeferredLighting();
|
||||
void postDeferredGammaCorrect(LLRenderTarget* screen_target);
|
||||
|
||||
void generateWaterReflection(LLCamera& camera);
|
||||
void generateSunShadow(LLCamera& camera);
|
||||
LLRenderTarget* getSunShadowTarget(U32 i);
|
||||
LLRenderTarget* getSpotShadowTarget(U32 i);
|
||||
|
|
@ -645,7 +644,6 @@ public:
|
|||
static bool sUseTriStrips;
|
||||
static bool sUseFarClip;
|
||||
static bool sShadowRender;
|
||||
static bool sWaterReflections;
|
||||
static bool sDynamicLOD;
|
||||
static bool sPickAvatar;
|
||||
static bool sReflectionRender;
|
||||
|
|
@ -1058,7 +1056,6 @@ public:
|
|||
static LLVector3 RenderShadowGaussian;
|
||||
static F32 RenderShadowBlurDistFactor;
|
||||
static bool RenderDeferredAtmospheric;
|
||||
static S32 RenderReflectionDetail;
|
||||
static F32 RenderHighlightFadeTime;
|
||||
static LLVector3 RenderShadowClipPlanes;
|
||||
static LLVector3 RenderShadowOrthoClipPlanes;
|
||||
|
|
|
|||
|
|
@ -595,7 +595,6 @@ BOOL FloaterQuickPrefs::postBuild()
|
|||
mCtrlUseSSAO = getChild<LLCheckBoxCtrl>("UseSSAO");
|
||||
mCtrlUseDoF = getChild<LLCheckBoxCtrl>("UseDepthofField");
|
||||
mCtrlShadowDetail = getChild<LLComboBox>("ShadowDetail");
|
||||
mCtrlReflectionDetail = getChild<LLComboBox>("Reflections");
|
||||
|
||||
// Vignette UI controls
|
||||
mSpinnerVignetteX = getChild<LLSpinCtrl>("VignetteSpinnerX");
|
||||
|
|
@ -1044,9 +1043,6 @@ void FloaterQuickPrefs::setSelectedDayCycle(const std::string& preset_name)
|
|||
// Phototools additions
|
||||
void FloaterQuickPrefs::refreshSettings()
|
||||
{
|
||||
BOOL reflections = LLCubeMap::sUseCubeMaps;
|
||||
mCtrlReflectionDetail->setEnabled(reflections);
|
||||
|
||||
LLTextBox* sky_label = getChild<LLTextBox>("T_Sky_Detail");
|
||||
LLSlider* sky_slider = getChild<LLSlider>("SB_Sky_Detail");
|
||||
LLSpinCtrl* sky_spinner = getChild<LLSpinCtrl>("S_Sky_Detail");
|
||||
|
|
@ -1080,13 +1076,6 @@ void FloaterQuickPrefs::refreshSettings()
|
|||
mCtrlShadowDetail->setValue(0);
|
||||
}
|
||||
|
||||
// disabled reflections
|
||||
if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderReflectionDetail"))
|
||||
{
|
||||
mCtrlReflectionDetail->setEnabled(FALSE);
|
||||
mCtrlReflectionDetail->setValue(FALSE);
|
||||
}
|
||||
|
||||
// <FS:CR> FIRE-9630 - Vignette UI controls
|
||||
if (getIsPhototools())
|
||||
{
|
||||
|
|
|
|||
|
|
@ -122,8 +122,7 @@ private:
|
|||
LLCheckBoxCtrl* mCtrlUseSSAO;
|
||||
LLCheckBoxCtrl* mCtrlUseDoF;
|
||||
LLComboBox* mCtrlShadowDetail;
|
||||
LLComboBox* mCtrlReflectionDetail;
|
||||
|
||||
|
||||
// Vignette UI controls
|
||||
LLSpinCtrl* mSpinnerVignetteX;
|
||||
LLSpinCtrl* mSpinnerVignetteY;
|
||||
|
|
|
|||
|
|
@ -474,59 +474,6 @@
|
|||
</text>
|
||||
</panel>
|
||||
|
||||
<panel
|
||||
name="P_W_R_Types"
|
||||
follows="top|left"
|
||||
layout="topleft"
|
||||
top_pad="5"
|
||||
left="4"
|
||||
width="275"
|
||||
height="36"
|
||||
border_visible="true"
|
||||
background_visible="true">
|
||||
<text
|
||||
name="T_W_R_Types"
|
||||
follows="left|top"
|
||||
height="15"
|
||||
left="10"
|
||||
top_pad="13"
|
||||
width="75"
|
||||
layout="topleft"
|
||||
tool_tip="Determines what will show up in water reflections.">
|
||||
Type
|
||||
</text>
|
||||
<combo_box
|
||||
control_name="RenderReflectionDetail"
|
||||
height="22"
|
||||
layout="topleft"
|
||||
left_pad="20"
|
||||
top_delta="-5"
|
||||
name="Reflections"
|
||||
width="165"
|
||||
follows="left|right">
|
||||
<combo_box.item
|
||||
label="Minimal"
|
||||
name="0"
|
||||
value="0"/>
|
||||
<combo_box.item
|
||||
label="Terrain and trees"
|
||||
name="1"
|
||||
value="1"/>
|
||||
<combo_box.item
|
||||
label="All static objects"
|
||||
name="2"
|
||||
value="2"/>
|
||||
<combo_box.item
|
||||
label="All avatars and objects"
|
||||
name="3"
|
||||
value="3"/>
|
||||
<combo_box.item
|
||||
label="Everything"
|
||||
name="4"
|
||||
value="4"/>
|
||||
</combo_box>
|
||||
</panel>
|
||||
|
||||
<panel
|
||||
name="P_R_Res"
|
||||
follows="top|left"
|
||||
|
|
|
|||
|
|
@ -550,57 +550,6 @@
|
|||
top_delta="16"
|
||||
width="300" />
|
||||
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
layout="topleft"
|
||||
name="ReflectionsText"
|
||||
text_readonly_color="LabelDisabledColor"
|
||||
top_delta="16"
|
||||
left="420"
|
||||
width="128">
|
||||
Water Reflections:
|
||||
</text>
|
||||
<combo_box
|
||||
control_name="RenderReflectionDetail"
|
||||
height="18"
|
||||
layout="topleft"
|
||||
left_delta="170"
|
||||
top_delta="0"
|
||||
name="Reflections"
|
||||
width="150">
|
||||
<combo_box.item
|
||||
label="None; opaque"
|
||||
name="-2"
|
||||
value="-2"/>
|
||||
<combo_box.item
|
||||
label="None; transparent"
|
||||
name="-1"
|
||||
value="-1"/>
|
||||
<combo_box.item
|
||||
label="Minimal"
|
||||
name="0"
|
||||
value="0"/>
|
||||
<combo_box.item
|
||||
label="Terrain and trees"
|
||||
name="1"
|
||||
value="1"/>
|
||||
<combo_box.item
|
||||
label="All static objects"
|
||||
name="2"
|
||||
value="2"/>
|
||||
<combo_box.item
|
||||
label="All avatars and objects"
|
||||
name="3"
|
||||
value="3"/>
|
||||
<combo_box.item
|
||||
label="Everything"
|
||||
name="4"
|
||||
value="4"/>
|
||||
</combo_box>
|
||||
|
||||
<slider
|
||||
control_name="WLSkyDetail"
|
||||
decimal_digits="0"
|
||||
|
|
|
|||
|
|
@ -355,56 +355,6 @@
|
|||
name="2"
|
||||
value="2"/>
|
||||
</combo_box>
|
||||
<text
|
||||
type="string"
|
||||
length="1"
|
||||
top_pad="4"
|
||||
follows="top|left"
|
||||
height="12"
|
||||
width="110"
|
||||
word_wrap="true"
|
||||
layout="topleft"
|
||||
left_delta="-5"
|
||||
name="reflection_label">
|
||||
Water Reflections:
|
||||
</text>
|
||||
<combo_box
|
||||
control_name="RenderReflectionDetail"
|
||||
height="23"
|
||||
layout="topleft"
|
||||
left_delta="5"
|
||||
top_pad ="3"
|
||||
name="Reflections"
|
||||
width="150">
|
||||
<combo_box.item
|
||||
label="None (opaque)"
|
||||
name="-2"
|
||||
value="-2"/>
|
||||
<combo_box.item
|
||||
label="None (transparent)"
|
||||
name="-1"
|
||||
value="-1"/>
|
||||
<combo_box.item
|
||||
label="Minimal"
|
||||
name="0"
|
||||
value="0"/>
|
||||
<combo_box.item
|
||||
label="Terrain and trees"
|
||||
name="1"
|
||||
value="1"/>
|
||||
<combo_box.item
|
||||
label="All static objects"
|
||||
name="2"
|
||||
value="2"/>
|
||||
<combo_box.item
|
||||
label="All avatars and objects"
|
||||
name="3"
|
||||
value="3"/>
|
||||
<combo_box.item
|
||||
label="Everything"
|
||||
name="4"
|
||||
value="4"/>
|
||||
</combo_box>
|
||||
<!-- FS:TM Avatar Physics was moved down to LOD section-->
|
||||
<!-- FS:TM Point Lighting added instead of above-->
|
||||
<text
|
||||
|
|
|
|||
Loading…
Reference in New Issue