30f0ad28 |
1 | // Created on: 2013-10-02 |
2 | // Created by: Denis BOGOLEPOV |
d5f74e42 |
3 | // Copyright (c) 2013-2014 OPEN CASCADE SAS |
30f0ad28 |
4 | // |
973c2be1 |
5 | // This file is part of Open CASCADE Technology software library. |
30f0ad28 |
6 | // |
d5f74e42 |
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 |
973c2be1 |
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. |
30f0ad28 |
12 | // |
973c2be1 |
13 | // Alternatively, this file may be used under the terms of Open CASCADE |
14 | // commercial license or contractual agreement. |
30f0ad28 |
15 | |
30f0ad28 |
16 | #include <OpenGl_ShaderStates.hxx> |
17 | |
18 | // ======================================================================= |
19 | // function : OpenGl_StateInterface |
8cf06aa2 |
20 | // purpose : |
30f0ad28 |
21 | // ======================================================================= |
22 | OpenGl_StateInterface::OpenGl_StateInterface() |
8cf06aa2 |
23 | : myIndex (0) |
30f0ad28 |
24 | { |
25 | // |
26 | } |
27 | |
30f0ad28 |
28 | // ======================================================================= |
29 | // function : OpenGl_ProjectionState |
30 | // purpose : Creates uninitialized projection state |
31 | // ======================================================================= |
32 | OpenGl_ProjectionState::OpenGl_ProjectionState() |
33 | : myInverseNeedUpdate (false) |
34 | { |
35 | // |
36 | } |
37 | |
38 | // ======================================================================= |
39 | // function : Set |
40 | // purpose : Sets new OCCT projection state |
41 | // ======================================================================= |
c827ea3a |
42 | void OpenGl_ProjectionState::Set (const OpenGl_Mat4& theProjectionMatrix) |
30f0ad28 |
43 | { |
c827ea3a |
44 | myProjectionMatrix = theProjectionMatrix; |
30f0ad28 |
45 | myInverseNeedUpdate = true; |
46 | } |
47 | |
48 | // ======================================================================= |
49 | // function : ProjectionMatrix |
50 | // purpose : Returns current projection matrix |
51 | // ======================================================================= |
c827ea3a |
52 | const OpenGl_Mat4& OpenGl_ProjectionState::ProjectionMatrix() const |
30f0ad28 |
53 | { |
54 | return myProjectionMatrix; |
55 | } |
56 | |
57 | // ======================================================================= |
58 | // function : ProjectionMatrixInverse |
59 | // purpose : Returns inverse of current projection matrix |
60 | // ======================================================================= |
c827ea3a |
61 | const OpenGl_Mat4& OpenGl_ProjectionState::ProjectionMatrixInverse() const |
30f0ad28 |
62 | { |
63 | if (!myInverseNeedUpdate) |
64 | { |
65 | return myProjectionMatrixInverse; |
66 | } |
67 | |
c827ea3a |
68 | myProjectionMatrix.Inverted (myProjectionMatrixInverse); |
69 | |
30f0ad28 |
70 | return myProjectionMatrixInverse; |
71 | } |
72 | |
73 | // ======================================================================= |
74 | // function : OpenGl_ModelWorldState |
75 | // purpose : Creates uninitialized model-world state |
76 | // ======================================================================= |
77 | OpenGl_ModelWorldState::OpenGl_ModelWorldState() |
78 | : myInverseNeedUpdate (false) |
79 | { |
80 | // |
81 | } |
82 | |
83 | // ======================================================================= |
84 | // function : Set |
85 | // purpose : Sets new model-world matrix |
86 | // ======================================================================= |
c827ea3a |
87 | void OpenGl_ModelWorldState::Set (const OpenGl_Mat4& theModelWorldMatrix) |
30f0ad28 |
88 | { |
c827ea3a |
89 | myModelWorldMatrix = theModelWorldMatrix; |
30f0ad28 |
90 | myInverseNeedUpdate = true; |
91 | } |
92 | |
93 | // ======================================================================= |
94 | // function : ModelWorldMatrix |
95 | // purpose : Returns current model-world matrix |
96 | // ======================================================================= |
c827ea3a |
97 | const OpenGl_Mat4& OpenGl_ModelWorldState::ModelWorldMatrix() const |
30f0ad28 |
98 | { |
99 | return myModelWorldMatrix; |
100 | } |
101 | |
102 | // ======================================================================= |
103 | // function : ModelWorldMatrixInverse |
104 | // purpose : Returns inverse of current model-world matrix |
105 | // ======================================================================= |
c827ea3a |
106 | const OpenGl_Mat4& OpenGl_ModelWorldState::ModelWorldMatrixInverse() const |
30f0ad28 |
107 | { |
108 | if (!myInverseNeedUpdate) |
109 | { |
110 | return myModelWorldMatrix; |
111 | } |
112 | |
c827ea3a |
113 | myModelWorldMatrix.Inverted (myModelWorldMatrixInverse); |
114 | |
30f0ad28 |
115 | return myModelWorldMatrixInverse; |
116 | } |
117 | |
118 | // ======================================================================= |
119 | // function : OpenGl_WorldViewState |
120 | // purpose : Creates uninitialized world-view state |
121 | // ======================================================================= |
122 | OpenGl_WorldViewState::OpenGl_WorldViewState() |
123 | : myInverseNeedUpdate (false) |
124 | { |
125 | // |
126 | } |
127 | |
128 | // ======================================================================= |
129 | // function : Set |
130 | // purpose : Sets new world-view matrix |
131 | // ======================================================================= |
c827ea3a |
132 | void OpenGl_WorldViewState::Set (const OpenGl_Mat4& theWorldViewMatrix) |
30f0ad28 |
133 | { |
c827ea3a |
134 | myWorldViewMatrix = theWorldViewMatrix; |
30f0ad28 |
135 | myInverseNeedUpdate = true; |
136 | } |
137 | |
138 | // ======================================================================= |
139 | // function : WorldViewMatrix |
140 | // purpose : Returns current world-view matrix |
141 | // ======================================================================= |
c827ea3a |
142 | const OpenGl_Mat4& OpenGl_WorldViewState::WorldViewMatrix() const |
30f0ad28 |
143 | { |
144 | return myWorldViewMatrix; |
145 | } |
146 | |
147 | // ======================================================================= |
148 | // function : WorldViewMatrixInverse |
149 | // purpose : Returns inverse of current world-view matrix |
150 | // ======================================================================= |
c827ea3a |
151 | const OpenGl_Mat4& OpenGl_WorldViewState::WorldViewMatrixInverse() const |
30f0ad28 |
152 | { |
153 | if (!myInverseNeedUpdate) |
154 | { |
155 | return myWorldViewMatrix; |
156 | } |
157 | |
c827ea3a |
158 | myWorldViewMatrix.Inverted (myWorldViewMatrixInverse); |
159 | |
30f0ad28 |
160 | return myWorldViewMatrixInverse; |
161 | } |
162 | |
163 | // ======================================================================= |
30f0ad28 |
164 | // function : OpenGl_ClippingState |
165 | // purpose : Creates new clipping state |
166 | // ======================================================================= |
167 | OpenGl_ClippingState::OpenGl_ClippingState() |
8cf06aa2 |
168 | : myIndex (0), |
169 | myNextIndex (1) |
30f0ad28 |
170 | { |
171 | // |
172 | } |
8cf06aa2 |
173 | |
174 | // ======================================================================= |
175 | // function : Update |
176 | // purpose : Updates current state |
177 | // ======================================================================= |
178 | void OpenGl_ClippingState::Update() |
179 | { |
180 | myStateStack.Prepend (myIndex); |
181 | myIndex = myNextIndex; // use myNextIndex here to handle properly Update() after Revert() |
182 | ++myNextIndex; |
183 | } |
184 | |
185 | // ======================================================================= |
186 | // function : Revert |
187 | // purpose : Reverts current state |
188 | // ======================================================================= |
189 | void OpenGl_ClippingState::Revert() |
190 | { |
191 | if (!myStateStack.IsEmpty()) |
192 | { |
193 | myIndex = myStateStack.First(); |
194 | myStateStack.RemoveFirst(); |
195 | } |
196 | else |
197 | { |
198 | myIndex = 0; |
199 | } |
200 | } |