0024250: TKOpenGl - per-pixel lighting using GLSL program (Phong shading)
[occt.git] / src / OpenGl / OpenGl_AspectMarker.cxx
index 78a077d..5dbfe52 100644 (file)
@@ -1539,7 +1539,8 @@ void OpenGl_AspectMarker::Release (const Handle(OpenGl_Context)& theCtx)
 
   if (!myResources.ShaderProgram.IsNull() && !theCtx.IsNull())
   {
-    theCtx->ShaderManager()->Unregister (myResources.ShaderProgram);
+    theCtx->ShaderManager()->Unregister (myResources.ShaderProgramId,
+                                         myResources.ShaderProgram);
   }
   myResources.ShaderProgramId.Clear();
   myResources.ResetShader();
@@ -1895,37 +1896,26 @@ void OpenGl_AspectMarker::Resources::BuildSprites (const Handle(OpenGl_Workspace
 // function : BuildShader
 // purpose  :
 // =======================================================================
-void OpenGl_AspectMarker::Resources::BuildShader (const Handle(OpenGl_Workspace)& theWS,
+void OpenGl_AspectMarker::Resources::BuildShader (const Handle(OpenGl_Workspace)&        theWS,
                                                   const Handle(Graphic3d_ShaderProgram)& theShader)
 {
   const Handle(OpenGl_Context)& aContext = theWS->GetGlContext();
-
   if (!aContext->IsGlGreaterEqual (2, 0))
+  {
     return;
+  }
 
   // release old shader program resources
   if (!ShaderProgram.IsNull())
   {
-    aContext->ShaderManager()->Unregister (ShaderProgram);
-  }
-
-  ShaderProgramId = theShader.IsNull() ? THE_EMPTY_KEY : theShader->GetId();
-
-  if (!theShader.IsNull())
-  {
-    if (!aContext->GetResource<Handle(OpenGl_ShaderProgram)> (ShaderProgramId, ShaderProgram))
-    {
-      ShaderProgram = aContext->ShaderManager()->Create (theShader);
-      if (!ShaderProgramId.IsEmpty())
-      {
-        aContext->ShareResource (ShaderProgramId, ShaderProgram);
-      }
-    }
+    aContext->ShaderManager()->Unregister (ShaderProgramId, ShaderProgram);
   }
-  else
+  if (theShader.IsNull())
   {
-    ShaderProgram.Nullify();
+    return;
   }
+
+  aContext->ShaderManager()->Create (theShader, ShaderProgramId, ShaderProgram);
 }
 
 // =======================================================================