0024354: TKOpenGl - location modification of multi-connected shape has no effect...
authorduv <duv@opencascade.com>
Tue, 18 Mar 2014 11:22:31 +0000 (15:22 +0400)
committerbugmaster <bugmaster@opencascade.com>
Fri, 28 Mar 2014 11:55:11 +0000 (15:55 +0400)
src/OpenGl/OpenGl_ShaderStates.cxx
src/OpenGl/OpenGl_ShaderStates.hxx

index c9bce15..d973809 100755 (executable)
@@ -22,7 +22,8 @@
 // purpose  : Creates new OCCT state
 // =======================================================================
 OpenGl_StateInterface::OpenGl_StateInterface()
-: myIndex (0)
+: myIndex (0),
+  myNextIndex (1)
 {
   //
 }
@@ -42,7 +43,9 @@ Standard_Size OpenGl_StateInterface::Index() const
 // =======================================================================
 void OpenGl_StateInterface::Update()
 {
-  ++myIndex;
+  myStateStack.Push (myIndex);
+  myIndex = myNextIndex;
+  ++myNextIndex;
 }
 
 // =======================================================================
@@ -51,9 +54,14 @@ void OpenGl_StateInterface::Update()
 // =======================================================================
 void OpenGl_StateInterface::Revert()
 {
-  if (myIndex > 0)
+  if (!myStateStack.IsEmpty())
   {
-    --myIndex;
+    myIndex = myStateStack.Top();
+    myStateStack.Pop();
+  }
+  else
+  {
+    myIndex = 0;
   }
 }
 
index 9d10d6f..80126a9 100755 (executable)
@@ -21,6 +21,8 @@
 #include <OpenGl_Element.hxx>
 #include <OpenGl_Light.hxx>
 
+#include <NCollection_Stack.hxx>
+
 //! Defines interface for OpenGL state.
 class OpenGl_StateInterface
 {
@@ -40,7 +42,9 @@ public:
 
 protected:
 
-  Standard_Size myIndex; //!< Current state index
+  Standard_Size myIndex;      //!< Current state index
+  Standard_Size myNextIndex;  //!< Next state index
+  NCollection_Stack<Standard_Size> myStateStack; //!< Stack of previous states.
 
 };