From a166fcaa9021c1881b907f9e10f4b7e517fdc701 Mon Sep 17 00:00:00 2001
From: Rye Mutt <rye@alchemyviewer.org>
Date: Fri, 28 Aug 2020 03:23:24 -0400
Subject: [PATCH] Properly free dummy vao on GL shutdown

---
 indra/llrender/llrender.cpp | 16 ++++++++++++----
 indra/llrender/llrender.h   |  1 +
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp
index 5c0e1c9c3bd..0ed3c09091c 100644
--- a/indra/llrender/llrender.cpp
+++ b/indra/llrender/llrender.cpp
@@ -1087,7 +1087,8 @@ LLRender::LLRender()
 	mQuadCycle(0),
     mMode(LLRender::TRIANGLES),
     mCurrTextureUnitIndex(0),
-    mLineWidth(1.f)
+    mLineWidth(1.f),
+    mDummyVAO(0)
 {	
 	mTexUnits.reserve(LL_NUM_TEXTURE_LAYERS);
 	for (U32 i = 0; i < LL_NUM_TEXTURE_LAYERS; i++)
@@ -1135,9 +1136,8 @@ void LLRender::init()
 	if (sGLCoreProfile && !LLVertexBuffer::sUseVAO)
 	{ //bind a dummy vertex array object so we're core profile compliant
 #ifdef GL_ARB_vertex_array_object
-		U32 ret;
-		glGenVertexArrays(1, &ret);
-		glBindVertexArray(ret);
+		glGenVertexArrays(1, &mDummyVAO);
+		glBindVertexArray(mDummyVAO);
 #endif
 	}
 
@@ -1154,6 +1154,14 @@ void LLRender::init()
 
 void LLRender::shutdown()
 {
+    if (mDummyVAO != 0)
+    { //bind a dummy vertex array object so we're core profile compliant
+#ifdef GL_ARB_vertex_array_object
+        glDeleteVertexArrays(1, &mDummyVAO);
+#endif
+        mDummyVAO = 0;
+    }
+
 	for (U32 i = 0; i < mTexUnits.size(); i++)
 	{
 		delete mTexUnits[i];
diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h
index 194891b95ec..5c2c74b58b1 100644
--- a/indra/llrender/llrender.h
+++ b/indra/llrender/llrender.h
@@ -508,6 +508,7 @@ class LLRender
 	eBlendFactor mCurrBlendAlphaDFactor;
 
 	F32				mMaxAnisotropy;
+    U32             mDummyVAO;
 
 	std::vector<LLVector3> mUIOffset;
 	std::vector<LLVector3> mUIScale;
-- 
GitLab