0024297: OpenGl_Texture::Release() might call OpenGL functions without active context
authorkgv <kgv@opencascade.com>
Tue, 29 Oct 2013 10:10:28 +0000 (14:10 +0400)
committerbugmaster <bugmaster@opencascade.com>
Thu, 31 Oct 2013 09:50:05 +0000 (13:50 +0400)
Add check to Release() method of OpenGl_Texture, OpenGl_ShaderObject, OpenGl_ShaderProgram

src/OpenGl/OpenGl_ShaderObject.cxx
src/OpenGl/OpenGl_ShaderProgram.cxx
src/OpenGl/OpenGl_Texture.cxx

index 9537ccd..e84c11a 100644 (file)
@@ -139,7 +139,8 @@ void OpenGl_ShaderObject::Release (const OpenGl_Context* theCtx)
   Standard_ASSERT_RETURN (theCtx != NULL,
     "OpenGl_ShaderObject destroyed without GL context! Possible GPU memory leakage...",);
 
-  if (theCtx->core20 != NULL)
+  if (theCtx->core20 != NULL
+   && theCtx->IsValid())
   {
     theCtx->core20->glDeleteShader (myShaderID);
   }
index 7a7ffcd..6a6e5e1 100644 (file)
@@ -1120,7 +1120,8 @@ void OpenGl_ShaderProgram::Release (const OpenGl_Context* theCtx)
     anIter.ChangeValue().Nullify();
   }
 
-  if (theCtx->core20 != NULL)
+  if (theCtx->core20 != NULL
+   && theCtx->IsValid())
   {
     theCtx->core20->glDeleteProgram (myProgramID);
   }
index f1c1b90..2e9552c 100644 (file)
@@ -111,7 +111,10 @@ void OpenGl_Texture::Release (const OpenGl_Context* theGlCtx)
   Standard_ASSERT_RETURN (theGlCtx != NULL,
     "OpenGl_Texture destroyed without GL context! Possible GPU memory leakage...",);
 
-  glDeleteTextures (1, &myTextureId);
+  if (theGlCtx->IsValid())
+  {
+    glDeleteTextures (1, &myTextureId);
+  }
   myTextureId = NO_TEXTURE;
   mySizeX = mySizeY = 0;
 }