0028093: Visualization - access violation on removal of dynamic highlighting after...
[occt.git] / src / OpenGl / OpenGl_Layer.cxx
index 2458577..6b6c05e 100644 (file)
@@ -108,20 +108,24 @@ bool OpenGl_Layer::Remove (const OpenGl_Structure* theStruct,
 
       if (!isForChangePriority)
       {
-        if (theStruct->IsAlwaysRendered())
+        Standard_Boolean isAlwaysRend = theStruct->IsAlwaysRendered();
+        if (!isAlwaysRend)
         {
-          const Standard_Integer anIndex2 = myAlwaysRenderedMap.FindIndex (theStruct);
-          if (anIndex2 != 0)
+          if (!myBVHPrimitives.Remove (theStruct))
           {
-            myAlwaysRenderedMap.Swap (myAlwaysRenderedMap.Size(), anIndex2);
-            myAlwaysRenderedMap.RemoveLast();
+            if (!myBVHPrimitivesTrsfPers.Remove (theStruct))
+            {
+              isAlwaysRend = Standard_True;
+            }
           }
         }
-        else
+        if (isAlwaysRend)
         {
-          if (!myBVHPrimitives.Remove (theStruct))
+          const Standard_Integer anIndex2 = myAlwaysRenderedMap.FindIndex (theStruct);
+          if (anIndex2 != 0)
           {
-            myBVHPrimitivesTrsfPers.Remove (theStruct);
+            myAlwaysRenderedMap.Swap (myAlwaysRenderedMap.Size(), anIndex2);
+            myAlwaysRenderedMap.RemoveLast();
           }
         }
       }