]> OCCT Git - occt-copy.git/commitdiff
0024309: TKOpenGl - Delay release of GLSL resources
authorkgv <kgv@opencascade.com>
Fri, 1 Nov 2013 17:33:17 +0000 (21:33 +0400)
committerabv <abv@opencascade.com>
Tue, 5 Nov 2013 05:19:37 +0000 (09:19 +0400)
src/OpenGl/OpenGl_AspectFace.cxx
src/OpenGl/OpenGl_ShaderManager.cxx
src/OpenGl/OpenGl_ShaderProgram.hxx

index f7f9a79483a11a7965bb290522028fb2aead51be..aaf95eb9654c0de4a6439f79941ad08e03a7ebe1 100644 (file)
@@ -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();
index cff325cadcbe9d021c7f895ae244fe51f9383e0f..6b0419d1715f2f33887cf74f01651a307262bffe 100644 (file)
@@ -68,7 +68,10 @@ void OpenGl_ShaderManager::Create (const Handle(Graphic3d_ShaderProgram)& thePro
   theShareKey = theProxy->GetId();
   if (myContext->GetResource<Handle(OpenGl_ShaderProgram)> (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);
   }
 }
 
index 51b09d893938b9f87524eee196a3820ee38160f6..b97ec3ae8acc1982d6229cbcb4b25009d9485fd8 100644 (file)
@@ -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.