SL-20124 Wipe reflection probes when applying parcel EEP settings and pause updates on probes until transition completes.
parent
3da26ee8df
commit
bc4e90ea5e
|
|
@ -2954,12 +2954,20 @@ void LLEnvironment::DayTransition::animate()
|
|||
setWater(mNextInstance->getWater());
|
||||
});
|
||||
|
||||
|
||||
// pause probe updates and reset reflection maps on sky change
|
||||
gPipeline.mReflectionMapManager.pause();
|
||||
gPipeline.mReflectionMapManager.reset();
|
||||
|
||||
mSky = mStartSky->buildClone();
|
||||
mBlenderSky = std::make_shared<LLSettingsBlenderTimeDelta>(mSky, mStartSky, mNextInstance->getSky(), mTransitionTime);
|
||||
mBlenderSky->setOnFinished(
|
||||
[this](LLSettingsBlender::ptr_t blender) {
|
||||
mBlenderSky.reset();
|
||||
|
||||
// resume reflection probe updates
|
||||
gPipeline.mReflectionMapManager.resume();
|
||||
|
||||
if (!mBlenderSky && !mBlenderWater)
|
||||
LLEnvironment::instance().mCurrentEnvironment = mNextInstance;
|
||||
else
|
||||
|
|
@ -3550,12 +3558,19 @@ namespace
|
|||
LLSettingsSky::ptr_t target_sky(start_sky->buildClone());
|
||||
mInjectedSky->setSource(target_sky);
|
||||
|
||||
// clear reflection probes and pause updates during sky change
|
||||
gPipeline.mReflectionMapManager.pause();
|
||||
gPipeline.mReflectionMapManager.reset();
|
||||
|
||||
mBlenderSky = std::make_shared<LLSettingsBlenderTimeDelta>(target_sky, start_sky, psky, transition);
|
||||
mBlenderSky->setOnFinished(
|
||||
[this, psky](LLSettingsBlender::ptr_t blender)
|
||||
{
|
||||
mBlenderSky.reset();
|
||||
mInjectedSky->setSource(psky);
|
||||
|
||||
// resume updating reflection probes when done animating sky
|
||||
gPipeline.mReflectionMapManager.resume();
|
||||
setSky(mInjectedSky);
|
||||
if (!mBlenderWater && (countExperiencesActive() == 0))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -244,11 +244,14 @@ void LLReflectionMapManager::update()
|
|||
continue;
|
||||
}
|
||||
|
||||
if (probe != mDefaultProbe && !probe->isRelevant())
|
||||
{
|
||||
if (probe != mDefaultProbe &&
|
||||
(!probe->isRelevant() || mPaused))
|
||||
{ // skip irrelevant probes (or all non-default probes if paused)
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
|
||||
LLVector4a d;
|
||||
|
||||
if (probe != mDefaultProbe)
|
||||
|
|
@ -807,6 +810,16 @@ void LLReflectionMapManager::reset()
|
|||
mReset = true;
|
||||
}
|
||||
|
||||
void LLReflectionMapManager::pause()
|
||||
{
|
||||
mPaused = true;
|
||||
}
|
||||
|
||||
void LLReflectionMapManager::resume()
|
||||
{
|
||||
mPaused = false;
|
||||
}
|
||||
|
||||
void LLReflectionMapManager::shift(const LLVector4a& offset)
|
||||
{
|
||||
for (auto& probe : mProbes)
|
||||
|
|
|
|||
|
|
@ -84,6 +84,12 @@ public:
|
|||
// reset all state on the next update
|
||||
void reset();
|
||||
|
||||
// pause all updates other than the default probe
|
||||
void pause();
|
||||
|
||||
// unpause (see pause)
|
||||
void resume();
|
||||
|
||||
// called on region crossing to "shift" probes into new coordinate frame
|
||||
void shift(const LLVector4a& offset);
|
||||
|
||||
|
|
@ -191,5 +197,8 @@ private:
|
|||
|
||||
// if true, reset all probe render state on the next update (for teleports and sky changes)
|
||||
bool mReset = false;
|
||||
|
||||
// if true, only update the default probe
|
||||
bool mPaused = false;
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue