SL-20654 Fix for box probes sometimes glitching out at the corners. Incidental fix for crash when mWaterPool is null.

master
RunitaiLinden 2023-12-05 19:50:25 -06:00
parent 1718fe5da2
commit c28eb36a2c
4 changed files with 30 additions and 9 deletions

View File

@ -106,7 +106,7 @@ vec3 toneMap(vec3 color)
color *= exposure * exp_scale;
// mix ACES and Linear here as a compromise to avoid over-darkening legacy content
color = mix(toneMapACES_Hill(color), color, 0.333);
color = mix(toneMapACES_Hill(color), color, 0.3);
#endif
return color;

View File

@ -167,7 +167,16 @@ void LLReflectionMap::autoAdjustOrigin()
{
mPriority = 1;
mOrigin.load3(mViewerObject->getPositionAgent().mV);
mRadius = mViewerObject->getScale().mV[0]*0.5f;
if (mViewerObject->getVolume() && ((LLVOVolume*)mViewerObject)->getReflectionProbeIsBox())
{
LLVector3 s = mViewerObject->getScale().scaledVec(LLVector3(0.5f, 0.5f, 0.5f));
mRadius = s.magVec();
}
else
{
mRadius = mViewerObject->getScale().mV[0] * 0.5f;
}
}
}

View File

@ -252,14 +252,12 @@ void LLReflectionMapManager::update()
continue;
}
if (probe != mDefaultProbe &&
if (probe != mDefaultProbe &&
(!probe->isRelevant() || mPaused))
{ // skip irrelevant probes (or all non-default probes if paused)
continue;
}
LLVector4a d;
if (probe != mDefaultProbe)
@ -999,10 +997,21 @@ void LLReflectionMapManager::updateUniforms()
llassert(refmap->mCubeIndex >= 0); // should always be true, if not, getReflectionMaps is bugged
{
if (refmap->mViewerObject)
if (refmap->mViewerObject && refmap->mViewerObject->getVolume())
{ // have active manual probes live-track the object they're associated with
refmap->mOrigin.load3(refmap->mViewerObject->getPositionAgent().mV);
refmap->mRadius = refmap->mViewerObject->getScale().mV[0] * 0.5f;
LLVOVolume* vobj = (LLVOVolume*)refmap->mViewerObject;
refmap->mOrigin.load3(vobj->getPositionAgent().mV);
if (vobj->getReflectionProbeIsBox())
{
LLVector3 s = vobj->getScale().scaledVec(LLVector3(0.5f, 0.5f, 0.5f));
refmap->mRadius = s.magVec();
}
else
{
refmap->mRadius = refmap->mViewerObject->getScale().mV[0] * 0.5f;
}
}
modelview.affineTransform(refmap->mOrigin, oa);

View File

@ -8303,7 +8303,10 @@ void LLPipeline::doWaterHaze()
gGLLastMatrix = NULL;
gGL.loadMatrix(gGLModelView);
mWaterPool->pushFaceGeometry();
if (mWaterPool)
{
mWaterPool->pushFaceGeometry();
}
}
unbindDeferredShader(haze_shader);