1 // Created on: 2013-10-02
2 // Created by: Denis BOGOLEPOV
3 // Copyright (c) 2013-2014 OPEN CASCADE SAS
5 // This file is part of Open CASCADE Technology software library.
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
16 #ifndef _OpenGl_State_HeaderFile
17 #define _OpenGl_State_HeaderFile
19 #include <Graphic3d_TypeOfSurfaceDetail.hxx>
20 #include <InterfaceGraphic_tgl_all.hxx>
21 #include <NCollection_List.hxx>
22 #include <OpenGl_Element.hxx>
23 #include <OpenGl_Light.hxx>
24 #include <OpenGl_Vec.hxx>
26 //! Defines interface for OpenGL state.
27 class OpenGl_StateInterface
31 //! Creates new state.
32 OpenGl_StateInterface();
34 //! Returns current state index.
35 Standard_Size Index() const { return myIndex; }
37 //! Increment current state.
38 void Update() { ++myIndex; }
42 Standard_Size myIndex; //!< current state index
46 //! Defines state of OCCT projection transformation.
47 class OpenGl_ProjectionState : public OpenGl_StateInterface
51 //! Creates uninitialized projection state.
52 OpenGl_ProjectionState();
54 //! Sets new projection matrix.
55 void Set (const OpenGl_Mat4& theProjectionMatrix);
57 //! Returns current projection matrix.
58 const OpenGl_Mat4& ProjectionMatrix() const;
60 //! Returns inverse of current projection matrix.
61 const OpenGl_Mat4& ProjectionMatrixInverse() const;
65 OpenGl_Mat4 myProjectionMatrix; //!< OCCT projection matrix
66 mutable OpenGl_Mat4 myProjectionMatrixInverse; //!< Inverse of OCCT projection matrix
67 bool myInverseNeedUpdate; //!< Is inversed matrix outdated?
71 //! Defines state of OCCT model-world transformation.
72 class OpenGl_ModelWorldState : public OpenGl_StateInterface
76 //! Creates uninitialized model-world state.
77 OpenGl_ModelWorldState();
79 //! Sets new model-world matrix.
80 void Set (const OpenGl_Mat4& theModelWorldMatrix);
82 //! Returns current model-world matrix.
83 const OpenGl_Mat4& ModelWorldMatrix() const;
85 //! Returns inverse of current model-world matrix.
86 const OpenGl_Mat4& ModelWorldMatrixInverse() const;
90 OpenGl_Mat4 myModelWorldMatrix; //!< OCCT model-world matrix
91 mutable OpenGl_Mat4 myModelWorldMatrixInverse; //!< Inverse of OCCT model-world matrix
92 bool myInverseNeedUpdate; //!< Is inversed matrix outdated?
96 //! Defines state of OCCT world-view transformation.
97 class OpenGl_WorldViewState : public OpenGl_StateInterface
101 //! Creates uninitialized world-view state.
102 OpenGl_WorldViewState();
104 //! Sets new world-view matrix.
105 void Set (const OpenGl_Mat4& theWorldViewMatrix);
107 //! Returns current world-view matrix.
108 const OpenGl_Mat4& WorldViewMatrix() const;
110 //! Returns inverse of current world-view matrix.
111 const OpenGl_Mat4& WorldViewMatrixInverse() const;
115 OpenGl_Mat4 myWorldViewMatrix; //!< OCCT world-view matrix
116 mutable OpenGl_Mat4 myWorldViewMatrixInverse; //!< Inverse of OCCT world-view matrix
117 bool myInverseNeedUpdate; //!< Is inversed matrix outdated?
121 //! Defines state of OCCT light sources.
122 class OpenGl_LightSourceState : public OpenGl_StateInterface
126 //! Creates uninitialized state of light sources.
127 OpenGl_LightSourceState();
129 //! Sets new light sources.
130 void Set (const OpenGl_ListOfLight* theLightSources);
132 //! Returns current list of light sources.
133 const OpenGl_ListOfLight* LightSources() const;
137 const OpenGl_ListOfLight* myLightSources; //!< List of OCCT light sources
141 //! Defines generic state of OCCT material properties.
142 class OpenGl_MaterialState : public OpenGl_StateInterface
146 //! Creates new material state.
147 OpenGl_MaterialState (const OpenGl_Element* theAspect = NULL);
149 //! Sets new material aspect.
150 void Set (const OpenGl_Element* theAspect);
152 //! Returns material aspect.
153 const OpenGl_Element* Aspect() const;
157 const OpenGl_Element* myAspect; //!< OCCT material aspect
161 //! Defines generic state of OCCT clipping state.
162 class OpenGl_ClippingState
166 //! Creates new clipping state.
167 OpenGl_ClippingState();
169 //! Returns current state index.
170 Standard_Size Index() const { return myIndex; }
172 //! Updates current state.
175 //! Reverts current state.
180 Standard_Size myIndex; //!< Current state index
181 Standard_Size myNextIndex; //!< Next state index
182 NCollection_List<Standard_Size> myStateStack; //!< Stack of previous states
186 //! Defines generic state of OCCT surface detail.
187 class OpenGl_SurfaceDetailState : public OpenGl_StateInterface
191 //! Creates new surface detail state.
192 OpenGl_SurfaceDetailState (const Graphic3d_TypeOfSurfaceDetail theDetail = Graphic3d_TOD_NONE)
193 : myDetail (theDetail)
198 //! Sets new surface detail.
199 void Set (const Graphic3d_TypeOfSurfaceDetail theDetail) { myDetail = theDetail; }
201 //! Returns surface detail.
202 Graphic3d_TypeOfSurfaceDetail Detail() const { return myDetail; }
206 Graphic3d_TypeOfSurfaceDetail myDetail; //!< OCCT surface detail
210 #endif // _OpenGl_State_HeaderFile