From: kgv Date: Fri, 1 Nov 2013 17:33:17 +0000 (+0400) Subject: 0024309: TKOpenGl - Delay release of GLSL resources X-Git-Tag: V6_7_0_beta~10 X-Git-Url: http://git.dev.opencascade.org/gitweb/?a=commitdiff_plain;h=05dd08ce6390d7150345e06b82de22af3704cf54;p=occt-copy.git 0024309: TKOpenGl - Delay release of GLSL resources --- diff --git a/src/OpenGl/OpenGl_AspectFace.cxx b/src/OpenGl/OpenGl_AspectFace.cxx index f7f9a79483..aaf95eb965 100644 --- a/src/OpenGl/OpenGl_AspectFace.cxx +++ b/src/OpenGl/OpenGl_AspectFace.cxx @@ -405,7 +405,7 @@ void OpenGl_AspectFace::Release (const Handle(OpenGl_Context)& theContext) else { myResources.Texture.Nullify(); // we need nullify all handles before ReleaseResource() call - theContext->ReleaseResource (myResources.TextureId); + theContext->ReleaseResource (myResources.TextureId, Standard_True); } } myResources.Texture.Nullify(); diff --git a/src/OpenGl/OpenGl_ShaderManager.cxx b/src/OpenGl/OpenGl_ShaderManager.cxx index cff325cadc..6b0419d171 100644 --- a/src/OpenGl/OpenGl_ShaderManager.cxx +++ b/src/OpenGl/OpenGl_ShaderManager.cxx @@ -68,7 +68,10 @@ void OpenGl_ShaderManager::Create (const Handle(Graphic3d_ShaderProgram)& thePro theShareKey = theProxy->GetId(); if (myContext->GetResource (theShareKey, theProgram)) { - theProgram->Share(); + if (theProgram->Share()) + { + myProgramList.Append (theProgram); + } return; } @@ -118,7 +121,7 @@ void OpenGl_ShaderManager::Unregister (TCollection_AsciiString& theShareKey else { theProgram.Nullify(); - myContext->ReleaseResource (anID); + myContext->ReleaseResource (anID, Standard_True); } } diff --git a/src/OpenGl/OpenGl_ShaderProgram.hxx b/src/OpenGl/OpenGl_ShaderProgram.hxx index 51b09d8939..b97ec3ae8a 100644 --- a/src/OpenGl/OpenGl_ShaderProgram.hxx +++ b/src/OpenGl/OpenGl_ShaderProgram.hxx @@ -493,9 +493,10 @@ protected: //! Increments counter of users. //! Used by OpenGl_ShaderManager. - void Share() + //! @return true when resource has been restored from delayed release queue + bool Share() { - ++myShareCount; + return ++myShareCount == 1; } //! Decrements counter of users.