SL-10566, SL-10677
Make sky updates only occur if the input atmospherics values have actually changed (perf optimization). Make water rendering use specular color for coloring spec.master
parent
41c7523e08
commit
5937a42224
|
|
@ -500,6 +500,9 @@ void LLDrawPoolWater::shade2(bool edge, LLGLSLShader* shader, const LLColor3& li
|
|||
}
|
||||
}
|
||||
|
||||
LLColor4 specular(psky->getIsSunUp() ? psky->getSunlightColor() : psky->getMoonlightColor());
|
||||
shader->uniform4fv(LLShaderMgr::SPECULAR_COLOR, 1, specular.mV);
|
||||
|
||||
sTime = (F32)LLFrameTimer::getElapsedSeconds() * 0.5f;
|
||||
|
||||
S32 reftex = shader->enableTexture(LLShaderMgr::WATER_REFTEX);
|
||||
|
|
|
|||
|
|
@ -206,6 +206,8 @@ public:
|
|||
{
|
||||
}
|
||||
|
||||
LL_FORCE_INLINE friend bool operator==(const AtmosphericsVars& a, const AtmosphericsVars& b);
|
||||
|
||||
LLColor3 hazeColor;
|
||||
LLColor3 hazeColorBelowCloud;
|
||||
LLColor3 cloudColorSun;
|
||||
|
|
@ -231,6 +233,115 @@ public:
|
|||
LLColor3 total_density;
|
||||
};
|
||||
|
||||
bool operator==(const AtmosphericsVars& a, const AtmosphericsVars& b)
|
||||
{
|
||||
if (a.hazeColor != b.hazeColor)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (a.hazeColorBelowCloud != b.hazeColorBelowCloud)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (a.cloudColorSun != b.cloudColorSun)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (a.cloudColorAmbient != b.cloudColorAmbient)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (a.cloudDensity != b.cloudDensity)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (a.density_multiplier != b.density_multiplier)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (a.haze_horizon != b.haze_horizon)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (a.haze_density != b.haze_density)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (a.blue_horizon != b.blue_horizon)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (a.blue_density != b.blue_density)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (a.dome_offset != b.dome_offset)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (a.dome_radius != b.dome_radius)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (a.cloud_shadow != b.cloud_shadow)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (a.glow != b.glow)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (a.ambient != b.ambient)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (a.sunlight != b.sunlight)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (a.sun_norm != b.sun_norm)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (a.gamma != b.gamma)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (a.max_y != b.max_y)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (a.distance_multiplier != b.distance_multiplier)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// light_atten, light_transmittance, total_density
|
||||
// are ignored as they always change when the values above do
|
||||
// they're just shared calc across the sky map generation to save cycles
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
class LLAtmospherics
|
||||
{
|
||||
public:
|
||||
|
|
|
|||
|
|
@ -479,7 +479,7 @@ void LLVOSky::init()
|
|||
m_atmosphericsVars.density_multiplier = psky->getDensityMultiplier();
|
||||
m_atmosphericsVars.max_y = psky->getMaxY();
|
||||
m_atmosphericsVars.sun_norm = LLEnvironment::instance().getClampedSunNorm();
|
||||
m_atmosphericsVars.sunlight = psky->getSunlightColor();
|
||||
m_atmosphericsVars.sunlight = psky->getIsSunUp() ? psky->getSunlightColor() : psky->getMoonlightColor();
|
||||
m_atmosphericsVars.ambient = psky->getAmbientColor();
|
||||
m_atmosphericsVars.glow = psky->getGlow();
|
||||
m_atmosphericsVars.cloud_shadow = psky->getCloudShadow();
|
||||
|
|
@ -531,7 +531,7 @@ void LLVOSky::calc()
|
|||
m_atmosphericsVars.distance_multiplier = psky->getDistanceMultiplier();
|
||||
m_atmosphericsVars.max_y = psky->getMaxY();
|
||||
m_atmosphericsVars.sun_norm = LLEnvironment::instance().getClampedSunNorm();
|
||||
m_atmosphericsVars.sunlight = psky->getSunlightColor();
|
||||
m_atmosphericsVars.sunlight = psky->getIsSunUp() ? psky->getSunlightColor() : psky->getMoonlightColor();
|
||||
m_atmosphericsVars.ambient = psky->getAmbientColor();
|
||||
m_atmosphericsVars.glow = psky->getGlow();
|
||||
m_atmosphericsVars.cloud_shadow = psky->getCloudShadow();
|
||||
|
|
@ -750,7 +750,9 @@ bool LLVOSky::updateSky()
|
|||
|
||||
calc();
|
||||
|
||||
if (mForceUpdate && mForceUpdateThrottle.hasExpired())
|
||||
bool same_atmospherics = m_lastAtmosphericsVars == m_atmosphericsVars;
|
||||
|
||||
if (mForceUpdate && mForceUpdateThrottle.hasExpired() && !same_atmospherics)
|
||||
{
|
||||
LL_RECORD_BLOCK_TIME(FTM_VOSKY_UPDATEFORCED);
|
||||
|
||||
|
|
@ -758,6 +760,8 @@ bool LLVOSky::updateSky()
|
|||
|
||||
LLSkyTex::stepCurrent();
|
||||
|
||||
m_lastAtmosphericsVars = m_atmosphericsVars;
|
||||
|
||||
if (!direction.isExactlyZero())
|
||||
{
|
||||
mLastTotalAmbient = total_ambient;
|
||||
|
|
|
|||
Loading…
Reference in New Issue