0026361: Visualization - move OpenGl_TextFormatter to Font_TextFormatter
[occt.git] / src / OpenGl / OpenGl_ShaderStates.hxx
1 // Created on: 2013-10-02
2 // Created by: Denis BOGOLEPOV
3 // Copyright (c) 2013-2014 OPEN CASCADE SAS
4 //
5 // This file is part of Open CASCADE Technology software library.
6 //
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.
12 //
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
15
16 #ifndef _OpenGl_State_HeaderFile
17 #define _OpenGl_State_HeaderFile
18
19 #include <InterfaceGraphic_tgl_all.hxx>
20 #include <NCollection_List.hxx>
21 #include <OpenGl_Element.hxx>
22 #include <OpenGl_Light.hxx>
23 #include <OpenGl_Vec.hxx>
24 #include <Visual3d_TypeOfSurfaceDetail.hxx>
25
26 //! Defines interface for OpenGL state.
27 class OpenGl_StateInterface
28 {
29 public:
30
31   //! Creates new state.
32   OpenGl_StateInterface();
33
34   //! Returns current state index.
35   Standard_Size Index() const { return myIndex; }
36
37   //! Increment current state.
38   void Update() { ++myIndex; }
39
40 protected:
41
42   Standard_Size myIndex; //!< current state index
43
44 };
45
46 //! Defines state of OCCT projection transformation.
47 class OpenGl_ProjectionState : public OpenGl_StateInterface
48 {
49 public:
50
51   //! Creates uninitialized projection state.
52   OpenGl_ProjectionState();
53
54   //! Sets new projection matrix.
55   void Set (const OpenGl_Mat4& theProjectionMatrix);
56
57   //! Returns current projection matrix.
58   const OpenGl_Mat4& ProjectionMatrix() const;
59
60   //! Returns inverse of current projection matrix.
61   const OpenGl_Mat4& ProjectionMatrixInverse() const;
62
63 private:
64
65   OpenGl_Mat4         myProjectionMatrix;        //!< OCCT projection matrix
66   mutable OpenGl_Mat4 myProjectionMatrixInverse; //!< Inverse of OCCT projection matrix
67   bool                myInverseNeedUpdate;       //!< Is inversed matrix outdated?
68
69 };
70
71 //! Defines state of OCCT model-world transformation.
72 class OpenGl_ModelWorldState : public OpenGl_StateInterface
73 {
74 public:
75
76   //! Creates uninitialized model-world state.
77   OpenGl_ModelWorldState();
78
79   //! Sets new model-world matrix.
80   void Set (const OpenGl_Mat4& theModelWorldMatrix);
81
82   //! Returns current model-world matrix.
83   const OpenGl_Mat4& ModelWorldMatrix() const;
84
85   //! Returns inverse of current model-world matrix.
86   const OpenGl_Mat4& ModelWorldMatrixInverse() const;
87
88 private:
89
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?
93   
94 };
95
96 //! Defines state of OCCT world-view transformation.
97 class OpenGl_WorldViewState : public OpenGl_StateInterface
98 {
99 public:
100
101   //! Creates uninitialized world-view state.
102   OpenGl_WorldViewState();
103
104   //! Sets new world-view matrix.
105   void Set (const OpenGl_Mat4& theWorldViewMatrix);
106
107   //! Returns current world-view matrix.
108   const OpenGl_Mat4& WorldViewMatrix() const;
109
110   //! Returns inverse of current world-view matrix.
111   const OpenGl_Mat4& WorldViewMatrixInverse() const;
112
113 private:
114
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?
118
119 };
120
121 //! Defines state of OCCT light sources.
122 class OpenGl_LightSourceState : public OpenGl_StateInterface
123 {
124 public:
125
126   //! Creates uninitialized state of light sources.
127   OpenGl_LightSourceState();
128
129   //! Sets new light sources.
130   void Set (const OpenGl_ListOfLight* theLightSources);
131
132   //! Returns current list of light sources.
133   const OpenGl_ListOfLight* LightSources() const;
134
135 private:
136
137   const OpenGl_ListOfLight* myLightSources; //!< List of OCCT light sources
138
139 };
140
141 //! Defines generic state of OCCT material properties.
142 class OpenGl_MaterialState : public OpenGl_StateInterface
143 {
144 public:
145
146   //! Creates new material state.
147   OpenGl_MaterialState (const OpenGl_Element* theAspect = NULL);
148
149   //! Sets new material aspect.
150   void Set (const OpenGl_Element* theAspect);
151
152   //! Returns material aspect.
153   const OpenGl_Element* Aspect() const;
154
155 private:
156
157   const OpenGl_Element* myAspect; //!< OCCT material aspect
158
159 };
160
161 //! Defines generic state of OCCT clipping state.
162 class OpenGl_ClippingState
163 {
164 public:
165
166   //! Creates new clipping state.
167   OpenGl_ClippingState();
168
169   //! Returns current state index.
170   Standard_Size Index() const { return myIndex; }
171
172   //! Updates current state.
173   void Update();
174
175   //! Reverts current state.
176   void Revert();
177
178 protected:
179
180   Standard_Size                   myIndex;      //!< Current state index
181   Standard_Size                   myNextIndex;  //!< Next    state index
182   NCollection_List<Standard_Size> myStateStack; //!< Stack of previous states
183
184 };
185
186 //! Defines generic state of OCCT surface detail.
187 class OpenGl_SurfaceDetailState : public OpenGl_StateInterface
188 {
189 public:
190
191   //! Creates new surface detail state.
192   OpenGl_SurfaceDetailState (const Visual3d_TypeOfSurfaceDetail theDetail = Visual3d_TOD_NONE)
193   : myDetail (theDetail)
194   {
195     //
196   }
197
198   //! Sets new surface detail.
199   void Set (const Visual3d_TypeOfSurfaceDetail theDetail) { myDetail = theDetail; }
200
201   //! Returns surface detail.
202   const Visual3d_TypeOfSurfaceDetail Detail() const { return myDetail; }
203
204 private:
205
206   Visual3d_TypeOfSurfaceDetail myDetail; //!< OCCT surface detail
207
208 };
209
210 #endif // _OpenGl_State_HeaderFile