// purpose : Creates new OCCT state
// =======================================================================
OpenGl_StateInterface::OpenGl_StateInterface()
-: myIndex (0)
+: myIndex (0),
+ myNextIndex (1)
{
//
}
// =======================================================================
void OpenGl_StateInterface::Update()
{
- ++myIndex;
+ myStateStack.Push (myIndex);
+ myIndex = myNextIndex;
+ ++myNextIndex;
}
// =======================================================================
// =======================================================================
void OpenGl_StateInterface::Revert()
{
- if (myIndex > 0)
+ if (!myStateStack.IsEmpty())
{
- --myIndex;
+ myIndex = myStateStack.Top();
+ myStateStack.Pop();
+ }
+ else
+ {
+ myIndex = 0;
}
}
#include <OpenGl_Element.hxx>
#include <OpenGl_Light.hxx>
+#include <NCollection_Stack.hxx>
+
//! Defines interface for OpenGL state.
class OpenGl_StateInterface
{
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.
};