Skip to content
Snippets Groups Projects
Commit a29f7c3b authored by David Parks's avatar David Parks
Browse files

SL-20498 Preserve default probe when resetting reflection probes.

parent baaf698e
No related branches found
No related tags found
2 merge requests!3Update to main branch,!2Rebase onto current main branch
......@@ -110,6 +110,8 @@ LLCubeMapArray::~LLCubeMapArray()
void LLCubeMapArray::allocate(U32 resolution, U32 components, U32 count, BOOL use_mips)
{
U32 texname = 0;
mWidth = resolution;
mCount = count;
LLImageGL::generateTextures(1, &texname);
......
......@@ -60,9 +60,17 @@ class LLCubeMapArray : public LLRefCount
void destroyGL();
// get width of cubemaps in array (they're cubes, so this is also the height)
U32 getWidth() const { return mWidth; }
// get number of cubemaps in the array
U32 getCount() const { return mCount; }
protected:
friend class LLTexUnit;
~LLCubeMapArray();
LLPointer<LLImageGL> mImage;
U32 mWidth = 0;
U32 mCount = 0;
S32 mTextureStage;
};
......@@ -1258,13 +1258,18 @@ void LLReflectionMapManager::initReflectionMaps()
mProbeResolution = nhpo2(llclamp(gSavedSettings.getU32("RenderReflectionProbeResolution"), (U32)64, (U32)512));
mMaxProbeLOD = log2f(mProbeResolution) - 1.f; // number of mips - 1
mTexture = new LLCubeMapArray();
if (mTexture.isNull() ||
mTexture->getWidth() != mProbeResolution ||
mReflectionProbeCount + 2 != mTexture->getCount())
{
mTexture = new LLCubeMapArray();
// store mReflectionProbeCount+2 cube maps, final two cube maps are used for render target and radiance map generation source)
mTexture->allocate(mProbeResolution, 3, mReflectionProbeCount + 2);
// store mReflectionProbeCount+2 cube maps, final two cube maps are used for render target and radiance map generation source)
mTexture->allocate(mProbeResolution, 3, mReflectionProbeCount + 2);
mIrradianceMaps = new LLCubeMapArray();
mIrradianceMaps->allocate(LL_IRRADIANCE_MAP_RESOLUTION, 3, mReflectionProbeCount, FALSE);
mIrradianceMaps = new LLCubeMapArray();
mIrradianceMaps->allocate(LL_IRRADIANCE_MAP_RESOLUTION, 3, mReflectionProbeCount, FALSE);
}
// reset probe state
mUpdatingFace = 0;
......@@ -1272,6 +1277,9 @@ void LLReflectionMapManager::initReflectionMaps()
mRadiancePass = false;
mRealtimeRadiancePass = false;
// if default probe already exists, remember whether or not it's complete (SL-20498)
bool default_complete = mDefaultProbe.isNull() ? false : mDefaultProbe->mComplete;
for (auto& probe : mProbes)
{
probe->mLastUpdateTime = 0.f;
......@@ -1299,6 +1307,8 @@ void LLReflectionMapManager::initReflectionMaps()
mDefaultProbe->mDistance = 64.f;
mDefaultProbe->mRadius = 4096.f;
mDefaultProbe->mProbeIndex = 0;
mDefaultProbe->mComplete = default_complete;
touch_default_probe(mDefaultProbe);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment