diff --git a/indra/newview/llreflectionmapmanager.cpp b/indra/newview/llreflectionmapmanager.cpp
index 8282aa2507a6171fb42a0645ba691c523c1728c3..e8ad813ed2722c45be72a819612ffa6da1a88fb3 100644
--- a/indra/newview/llreflectionmapmanager.cpp
+++ b/indra/newview/llreflectionmapmanager.cpp
@@ -918,3 +918,26 @@ void LLReflectionMapManager::initReflectionMaps()
         mVertexBuffer = buff;
     }
 }
+
+void LLReflectionMapManager::cleanup() 
+{ 
+    mVertexBuffer = nullptr;
+    mRenderTarget.release();
+
+    mMipChain.clear();
+
+    mTexture = nullptr;
+    mIrradianceMaps = nullptr;
+
+    mProbes.clear();
+    mKillList.clear();
+    mCreateList.clear();
+
+    mReflectionMaps.clear();
+    mUpdatingFace = 0;
+    
+    mDefaultProbe = nullptr;
+
+    glDeleteBuffers(1, &mUBO);
+    mUBO = 0;
+}
diff --git a/indra/newview/llreflectionmapmanager.h b/indra/newview/llreflectionmapmanager.h
index e0a2c00db3a9cb51ed6396be5568afcd752bc6aa..4e2ff7c751967f32be8978d5474ebee77328d9f6 100644
--- a/indra/newview/llreflectionmapmanager.h
+++ b/indra/newview/llreflectionmapmanager.h
@@ -58,6 +58,9 @@ class alignas(16) LLReflectionMapManager
     // allocate an environment map of the given resolution 
     LLReflectionMapManager();
 
+    // release any GL state 
+    void cleanup();
+
     // maintain reflection probes
     void update();
 
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 0f348e4bc46907035480aecdff3de01d9631f403..2d4db48ac55fa34f249eed4c0bcb86e7a1976a59 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -659,6 +659,8 @@ void LLPipeline::cleanup()
 	mDeferredVB = NULL;
 
 	mCubeVB = NULL;
+
+    mReflectionMapManager.cleanup();
 }
 
 //============================================================================