1 ///////////////////////////////////////////////////////////////////////////////////
2 /// OpenGL Mathematics (glm.g-truc.net)
3 ///
4 /// Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)
5 /// Permission is hereby granted, free of charge, to any person obtaining a copy
6 /// of this software and associated documentation files (the "Software"), to deal
7 /// in the Software without restriction, including without limitation the rights
8 /// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 /// copies of the Software, and to permit persons to whom the Software is
10 /// furnished to do so, subject to the following conditions:
11 ///
12 /// The above copyright notice and this permission notice shall be included in
13 /// all copies or substantial portions of the Software.
14 ///
15 /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 /// THE SOFTWARE.
22 ///
23 /// @ref core
24 /// @file glm/core/type_mat.hpp
25 /// @date 2010-01-26 / 2011-06-15
26 /// @author Christophe Riccio
27 ///////////////////////////////////////////////////////////////////////////////////
28 
29 #ifndef glm_core_type_mat
30 #define glm_core_type_mat
31 
32 #include "precision.hpp"
33 
34 namespace glm{
35 namespace detail
36 {
37 	template <typename T, precision P> struct tvec2;
38 	template <typename T, precision P> struct tvec3;
39 	template <typename T, precision P> struct tvec4;
40 	template <typename T, precision P> struct tmat2x2;
41 	template <typename T, precision P> struct tmat2x3;
42 	template <typename T, precision P> struct tmat2x4;
43 	template <typename T, precision P> struct tmat3x2;
44 	template <typename T, precision P> struct tmat3x3;
45 	template <typename T, precision P> struct tmat3x4;
46 	template <typename T, precision P> struct tmat4x2;
47 	template <typename T, precision P> struct tmat4x3;
48 	template <typename T, precision P> struct tmat4x4;
49 
50 	template <typename T, precision P, template <class, precision> class colType, template <class, precision> class rowType>
51 	struct outerProduct_trait{};
52 
53 	template <template <class, precision> class matType, typename T, precision P>
54 	struct compute_inverse{};
55 }//namespace detail
56 
57 	/// @addtogroup core_precision
58 	/// @{
59 
60 	/// 2 columns of 2 components matrix of low precision floating-point numbers.
61 	/// There is no guarantee on the actual precision.
62 	///
63 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
64 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
65 	typedef detail::tmat2x2<float, lowp>		lowp_mat2;
66 
67 	/// 2 columns of 2 components matrix of medium precision floating-point numbers.
68 	/// There is no guarantee on the actual precision.
69 	///
70 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
71 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
72 	typedef detail::tmat2x2<float, mediump>		mediump_mat2;
73 
74 	/// 2 columns of 2 components matrix of high precision floating-point numbers.
75 	/// There is no guarantee on the actual precision.
76 	///
77 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
78 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
79 	typedef detail::tmat2x2<float, highp>		highp_mat2;
80 
81 	/// 2 columns of 2 components matrix of low precision floating-point numbers.
82 	/// There is no guarantee on the actual precision.
83 	///
84 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
85 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
86 	typedef detail::tmat2x2<float, lowp>		lowp_mat2x2;
87 
88 	/// 2 columns of 2 components matrix of medium precision floating-point numbers.
89 	/// There is no guarantee on the actual precision.
90 	///
91 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
92 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
93 	typedef detail::tmat2x2<float, mediump>		mediump_mat2x2;
94 
95 	/// 2 columns of 2 components matrix of high precision floating-point numbers.
96 	/// There is no guarantee on the actual precision.
97 	///
98 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
99 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
100 	typedef detail::tmat2x2<float, highp>		highp_mat2x2;
101 
102 	/// @}
103 
104 	/// @addtogroup core_precision
105 	/// @{
106 
107 	/// 2 columns of 3 components matrix of low precision floating-point numbers.
108 	/// There is no guarantee on the actual precision.
109 	///
110 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
111 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
112 	typedef detail::tmat2x3<float, lowp>		lowp_mat2x3;
113 
114 	/// 2 columns of 3 components matrix of medium precision floating-point numbers.
115 	/// There is no guarantee on the actual precision.
116 	///
117 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
118 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
119 	typedef detail::tmat2x3<float, mediump>		mediump_mat2x3;
120 
121 	/// 2 columns of 3 components matrix of high precision floating-point numbers.
122 	/// There is no guarantee on the actual precision.
123 	///
124 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
125 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
126 	typedef detail::tmat2x3<float, highp>		highp_mat2x3;
127 
128 	/// @}
129 
130 	/// @addtogroup core_precision
131 	/// @{
132 
133 	/// 2 columns of 4 components matrix of low precision floating-point numbers.
134 	/// There is no guarantee on the actual precision.
135 	///
136 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
137 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
138 	typedef detail::tmat2x4<float, lowp>		lowp_mat2x4;
139 
140 	/// 2 columns of 4 components matrix of medium precision floating-point numbers.
141 	/// There is no guarantee on the actual precision.
142 	///
143 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
144 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
145 	typedef detail::tmat2x4<float, mediump>		mediump_mat2x4;
146 
147 	/// 2 columns of 4 components matrix of high precision floating-point numbers.
148 	/// There is no guarantee on the actual precision.
149 	///
150 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
151 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
152 	typedef detail::tmat2x4<float, highp>		highp_mat2x4;
153 
154 	/// @}
155 
156 	/// @addtogroup core_precision
157 	/// @{
158 
159 	/// 3 columns of 2 components matrix of low precision floating-point numbers.
160 	/// There is no guarantee on the actual precision.
161 	///
162 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
163 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
164 	typedef detail::tmat3x2<float, lowp>		lowp_mat3x2;
165 
166 	/// 3 columns of 2 components matrix of medium precision floating-point numbers.
167 	/// There is no guarantee on the actual precision.
168 	///
169 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
170 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
171 	typedef detail::tmat3x2<float, mediump>		mediump_mat3x2;
172 
173 	/// 3 columns of 2 components matrix of high precision floating-point numbers.
174 	/// There is no guarantee on the actual precision.
175 	///
176 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
177 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
178 	typedef detail::tmat3x2<float, highp>		highp_mat3x2;
179 
180 	/// @}
181 
182 	/// @addtogroup core_precision
183 	/// @{
184 
185 	/// 3 columns of 3 components matrix of low precision floating-point numbers.
186 	/// There is no guarantee on the actual precision.
187 	///
188 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
189 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
190 	typedef detail::tmat3x3<float, lowp>		lowp_mat3;
191 
192 	/// 3 columns of 3 components matrix of medium precision floating-point numbers.
193 	/// There is no guarantee on the actual precision.
194 	///
195 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
196 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
197 	typedef detail::tmat3x3<float, mediump>		mediump_mat3;
198 
199 	/// 3 columns of 3 components matrix of high precision floating-point numbers.
200 	/// There is no guarantee on the actual precision.
201 	///
202 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
203 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
204 	typedef detail::tmat3x3<float, highp>		highp_mat3;
205 
206 	/// 3 columns of 3 components matrix of low precision floating-point numbers.
207 	/// There is no guarantee on the actual precision.
208 	///
209 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
210 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
211 	typedef detail::tmat3x3<float, lowp>		lowp_mat3x3;
212 
213 	/// 3 columns of 3 components matrix of medium precision floating-point numbers.
214 	/// There is no guarantee on the actual precision.
215 	///
216 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
217 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
218 	typedef detail::tmat3x3<float, mediump>		mediump_mat3x3;
219 
220 	/// 3 columns of 3 components matrix of high precision floating-point numbers.
221 	/// There is no guarantee on the actual precision.
222 	///
223 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
224 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
225 	typedef detail::tmat3x3<float, highp>		highp_mat3x3;
226 
227 	/// @}
228 
229 	/// @addtogroup core_precision
230 	/// @{
231 
232 	/// 3 columns of 4 components matrix of low precision floating-point numbers.
233 	/// There is no guarantee on the actual precision.
234 	///
235 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
236 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
237 	typedef detail::tmat3x4<float, lowp>		lowp_mat3x4;
238 
239 	/// 3 columns of 4 components matrix of medium precision floating-point numbers.
240 	/// There is no guarantee on the actual precision.
241 	///
242 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
243 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
244 	typedef detail::tmat3x4<float, mediump>		mediump_mat3x4;
245 
246 	/// 3 columns of 4 components matrix of high precision floating-point numbers.
247 	/// There is no guarantee on the actual precision.
248 	///
249 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
250 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
251 	typedef detail::tmat3x4<float, highp>		highp_mat3x4;
252 
253 	/// @}
254 
255 	/// @addtogroup core_precision
256 	/// @{
257 
258 	/// 4 columns of 2 components matrix of low precision floating-point numbers.
259 	/// There is no guarantee on the actual precision.
260 	///
261 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
262 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
263 	typedef detail::tmat4x2<float, lowp>		lowp_mat4x2;
264 
265 	/// 4 columns of 2 components matrix of medium precision floating-point numbers.
266 	/// There is no guarantee on the actual precision.
267 	///
268 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
269 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
270 	typedef detail::tmat4x2<float, mediump>		mediump_mat4x2;
271 
272 	/// 4 columns of 2 components matrix of high precision floating-point numbers.
273 	/// There is no guarantee on the actual precision.
274 	///
275 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
276 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
277 	typedef detail::tmat4x2<float, highp>		highp_mat4x2;
278 
279 	/// @}
280 
281 	/// @addtogroup core_precision
282 	/// @{
283 
284 	/// 4 columns of 3 components matrix of low precision floating-point numbers.
285 	/// There is no guarantee on the actual precision.
286 	///
287 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
288 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
289 	typedef detail::tmat4x3<float, lowp>		lowp_mat4x3;
290 
291 	/// 4 columns of 3 components matrix of medium precision floating-point numbers.
292 	/// There is no guarantee on the actual precision.
293 	///
294 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
295 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
296 	typedef detail::tmat4x3<float, mediump>		mediump_mat4x3;
297 
298 	/// 4 columns of 3 components matrix of high precision floating-point numbers.
299 	/// There is no guarantee on the actual precision.
300 	///
301 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
302 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
303 	typedef detail::tmat4x3<float, highp>		highp_mat4x3;
304 
305 	/// @}
306 
307 
308 	/// @addtogroup core_precision
309 	/// @{
310 
311 	/// 4 columns of 4 components matrix of low precision floating-point numbers.
312 	/// There is no guarantee on the actual precision.
313 	///
314 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
315 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
316 	typedef detail::tmat4x4<float, lowp>		lowp_mat4;
317 
318 	/// 4 columns of 4 components matrix of medium precision floating-point numbers.
319 	/// There is no guarantee on the actual precision.
320 	///
321 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
322 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
323 	typedef detail::tmat4x4<float, mediump>		mediump_mat4;
324 
325 	/// 4 columns of 4 components matrix of high precision floating-point numbers.
326 	/// There is no guarantee on the actual precision.
327 	///
328 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
329 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
330 	typedef detail::tmat4x4<float, highp>		highp_mat4;
331 
332 	/// 4 columns of 4 components matrix of low precision floating-point numbers.
333 	/// There is no guarantee on the actual precision.
334 	///
335 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
336 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
337 	typedef detail::tmat4x4<float, lowp>		lowp_mat4x4;
338 
339 	/// 4 columns of 4 components matrix of medium precision floating-point numbers.
340 	/// There is no guarantee on the actual precision.
341 	///
342 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
343 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
344 	typedef detail::tmat4x4<float, mediump>		mediump_mat4x4;
345 
346 	/// 4 columns of 4 components matrix of high precision floating-point numbers.
347 	/// There is no guarantee on the actual precision.
348 	///
349 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
350 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
351 	typedef detail::tmat4x4<float, highp>		highp_mat4x4;
352 
353 	/// @}
354 
355 	/// @addtogroup core_types
356 	/// @{
357 
358 	//////////////////////////
359 	// Float definition
360 
361 #if(defined(GLM_PRECISION_LOWP_FLOAT))
362 	typedef lowp_mat2x2			mat2x2;
363 	typedef lowp_mat2x3			mat2x3;
364 	typedef lowp_mat2x4			mat2x4;
365 	typedef lowp_mat3x2			mat3x2;
366 	typedef lowp_mat3x3			mat3x3;
367 	typedef lowp_mat3x4			mat3x4;
368 	typedef lowp_mat4x2			mat4x2;
369 	typedef lowp_mat4x3			mat4x3;
370 	typedef lowp_mat4x4			mat4x4;
371 #elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
372 	typedef mediump_mat2x2		mat2x2;
373 	typedef mediump_mat2x3		mat2x3;
374 	typedef mediump_mat2x4		mat2x4;
375 	typedef mediump_mat3x2		mat3x2;
376 	typedef mediump_mat3x3		mat3x3;
377 	typedef mediump_mat3x4		mat3x4;
378 	typedef mediump_mat4x2		mat4x2;
379 	typedef mediump_mat4x3		mat4x3;
380 	typedef mediump_mat4x4		mat4x4;
381 #else
382 	//! 2 columns of 2 components matrix of floating-point numbers.
383 	///
384 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
385 	typedef highp_mat2x2			mat2x2;
386 
387 	//! 2 columns of 3 components matrix of floating-point numbers.
388 	///
389 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
390 	typedef highp_mat2x3			mat2x3;
391 
392 	//! 2 columns of 4 components matrix of floating-point numbers.
393 	///
394 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
395 	typedef highp_mat2x4			mat2x4;
396 
397 	//! 3 columns of 2 components matrix of floating-point numbers.
398 	///
399 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
400 	typedef highp_mat3x2			mat3x2;
401 
402 	//! 3 columns of 3 components matrix of floating-point numbers.
403 	///
404 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
405 	typedef highp_mat3x3			mat3x3;
406 
407 	//! 3 columns of 4 components matrix of floating-point numbers.
408 	///
409 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
410 	typedef highp_mat3x4			mat3x4;
411 
412 	//! 4 columns of 2 components matrix of floating-point numbers.
413 	///
414 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
415 	typedef highp_mat4x2			mat4x2;
416 
417 	//! 4 columns of 3 components matrix of floating-point numbers.
418 	///
419 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
420 	typedef highp_mat4x3			mat4x3;
421 
422 	//! 4 columns of 4 components matrix of floating-point numbers.
423 	///
424 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
425 	typedef highp_mat4x4			mat4x4;
426 
427 #endif//GLM_PRECISION
428 
429 	//! 2 columns of 2 components matrix of floating-point numbers.
430 	///
431 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
432 	typedef mat2x2					mat2;
433 
434 	//! 3 columns of 3 components matrix of floating-point numbers.
435 	///
436 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
437 	typedef mat3x3					mat3;
438 
439 	//! 4 columns of 4 components matrix of floating-point numbers.
440 	///
441 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
442 	typedef mat4x4					mat4;
443 
444 	//////////////////////////
445 	// Double definition
446 
447 	/// @addtogroup core_precision
448 	/// @{
449 
450 	/// 2 columns of 2 components matrix of low precision floating-point numbers.
451 	///
452 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
453 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
454 	typedef detail::tmat2x2<double, lowp>		lowp_dmat2;
455 
456 	/// 2 columns of 2 components matrix of medium precision floating-point numbers.
457 	///
458 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
459 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
460 	typedef detail::tmat2x2<double, mediump>	mediump_dmat2;
461 
462 	/// 2 columns of 2 components matrix of high precision floating-point numbers.
463 	///
464 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
465 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
466 	typedef detail::tmat2x2<double, highp>		highp_dmat2;
467 
468 	/// 2 columns of 2 components matrix of low precision floating-point numbers.
469 	///
470 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
471 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
472 	typedef detail::tmat2x2<double, lowp>		lowp_dmat2x2;
473 
474 	/// 2 columns of 2 components matrix of medium precision floating-point numbers.
475 	///
476 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
477 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
478 	typedef detail::tmat2x2<double, mediump>	mediump_dmat2x2;
479 
480 	/// 2 columns of 2 components matrix of high precision floating-point numbers.
481 	///
482 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
483 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
484 	typedef detail::tmat2x2<double, highp>		highp_dmat2x2;
485 
486 	/// @}
487 
488 	/// @addtogroup core_precision
489 	/// @{
490 
491 	/// 2 columns of 3 components matrix of low precision floating-point numbers.
492 	///
493 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
494 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
495 	typedef detail::tmat2x3<double, lowp>		lowp_dmat2x3;
496 
497 	/// 2 columns of 3 components matrix of medium precision floating-point numbers.
498 	///
499 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
500 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
501 	typedef detail::tmat2x3<double, mediump>	mediump_dmat2x3;
502 
503 	/// 2 columns of 3 components matrix of high precision floating-point numbers.
504 	///
505 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
506 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
507 	typedef detail::tmat2x3<double, highp>		highp_dmat2x3;
508 
509 	/// @}
510 
511 	/// @addtogroup core_precision
512 	/// @{
513 
514 	/// 2 columns of 4 components matrix of low precision floating-point numbers.
515 	///
516 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
517 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
518 	typedef detail::tmat2x4<double, lowp>		lowp_dmat2x4;
519 
520 	/// 2 columns of 4 components matrix of medium precision floating-point numbers.
521 	///
522 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
523 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
524 	typedef detail::tmat2x4<double, mediump>	mediump_dmat2x4;
525 
526 	/// 2 columns of 4 components matrix of high precision floating-point numbers.
527 	///
528 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
529 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
530 	typedef detail::tmat2x4<double, highp>		highp_dmat2x4;
531 
532 	/// @}
533 
534 	/// @addtogroup core_precision
535 	/// @{
536 
537 	/// 3 columns of 2 components matrix of low precision floating-point numbers.
538 	///
539 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
540 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
541 	typedef detail::tmat3x2<double, lowp>		lowp_dmat3x2;
542 
543 	/// 3 columns of 2 components matrix of medium precision floating-point numbers.
544 	///
545 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
546 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
547 	typedef detail::tmat3x2<double, mediump>	mediump_dmat3x2;
548 
549 	/// 3 columns of 2 components matrix of high precision floating-point numbers.
550 	///
551 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
552 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
553 	typedef detail::tmat3x2<double, highp>		highp_dmat3x2;
554 
555 	/// @}
556 
557 	/// @addtogroup core_precision
558 	/// @{
559 
560 	/// 3 columns of 3 components matrix of low precision floating-point numbers.
561 	///
562 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
563 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
564 	typedef detail::tmat3x3<float, lowp>		lowp_dmat3;
565 
566 	/// 3 columns of 3 components matrix of medium precision floating-point numbers.
567 	///
568 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
569 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
570 	typedef detail::tmat3x3<double, mediump>	mediump_dmat3;
571 
572 	/// 3 columns of 3 components matrix of high precision floating-point numbers.
573 	///
574 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
575 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
576 	typedef detail::tmat3x3<double, highp>		highp_dmat3;
577 
578 	/// 3 columns of 3 components matrix of low precision floating-point numbers.
579 	///
580 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
581 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
582 	typedef detail::tmat3x3<double, lowp>		lowp_dmat3x3;
583 
584 	/// 3 columns of 3 components matrix of medium precision floating-point numbers.
585 	///
586 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
587 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
588 	typedef detail::tmat3x3<double, mediump>	mediump_dmat3x3;
589 
590 	/// 3 columns of 3 components matrix of high precision floating-point numbers.
591 	///
592 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
593 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
594 	typedef detail::tmat3x3<double, highp>		highp_dmat3x3;
595 
596 	/// @}
597 
598 	/// @addtogroup core_precision
599 	/// @{
600 
601 	/// 3 columns of 4 components matrix of low precision floating-point numbers.
602 	///
603 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
604 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
605 	typedef detail::tmat3x4<double, lowp>		lowp_dmat3x4;
606 
607 	/// 3 columns of 4 components matrix of medium precision floating-point numbers.
608 	///
609 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
610 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
611 	typedef detail::tmat3x4<double, mediump>	mediump_dmat3x4;
612 
613 	/// 3 columns of 4 components matrix of high precision floating-point numbers.
614 	///
615 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
616 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
617 	typedef detail::tmat3x4<double, highp>		highp_dmat3x4;
618 
619 	/// @}
620 
621 	/// @addtogroup core_precision
622 	/// @{
623 
624 	/// 4 columns of 2 components matrix of low precision floating-point numbers.
625 	///
626 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
627 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
628 	typedef detail::tmat4x2<double, lowp>		lowp_dmat4x2;
629 
630 	/// 4 columns of 2 components matrix of medium precision floating-point numbers.
631 	///
632 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
633 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
634 	typedef detail::tmat4x2<double, mediump>	mediump_dmat4x2;
635 
636 	/// 4 columns of 2 components matrix of high precision floating-point numbers.
637 	///
638 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
639 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
640 	typedef detail::tmat4x2<double, highp>		highp_dmat4x2;
641 
642 	/// @}
643 
644 	/// @addtogroup core_precision
645 	/// @{
646 
647 	/// 4 columns of 3 components matrix of low precision floating-point numbers.
648 	///
649 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
650 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
651 	typedef detail::tmat4x3<double, lowp>		lowp_dmat4x3;
652 
653 	/// 4 columns of 3 components matrix of medium precision floating-point numbers.
654 	///
655 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
656 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
657 	typedef detail::tmat4x3<double, mediump>	mediump_dmat4x3;
658 
659 	/// 4 columns of 3 components matrix of high precision floating-point numbers.
660 	///
661 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
662 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
663 	typedef detail::tmat4x3<double, highp>		highp_dmat4x3;
664 
665 	/// @}
666 
667 	/// @addtogroup core_precision
668 	/// @{
669 
670 	/// 4 columns of 4 components matrix of low precision floating-point numbers.
671 	///
672 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
673 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
674 	typedef detail::tmat4x4<double, lowp>		lowp_dmat4;
675 
676 	/// 4 columns of 4 components matrix of medium precision floating-point numbers.
677 	///
678 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
679 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
680 	typedef detail::tmat4x4<double, mediump>	mediump_dmat4;
681 
682 	/// 4 columns of 4 components matrix of high precision floating-point numbers.
683 	///
684 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
685 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
686 	typedef detail::tmat4x4<double, highp>		highp_dmat4;
687 
688 	/// 4 columns of 4 components matrix of low precision floating-point numbers.
689 	///
690 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
691 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
692 	typedef detail::tmat4x4<double, lowp>		lowp_dmat4x4;
693 
694 	/// 4 columns of 4 components matrix of medium precision floating-point numbers.
695 	///
696 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
697 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
698 	typedef detail::tmat4x4<double, mediump>	mediump_dmat4x4;
699 
700 	/// 4 columns of 4 components matrix of high precision floating-point numbers.
701 	///
702 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
703 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>
704 	typedef detail::tmat4x4<double, highp>		highp_dmat4x4;
705 
706 	/// @}
707 
708 #if(defined(GLM_PRECISION_LOWP_DOUBLE))
709 	typedef lowp_dmat2x2		dmat2x2;
710 	typedef lowp_dmat2x3		dmat2x3;
711 	typedef lowp_dmat2x4		dmat2x4;
712 	typedef lowp_dmat3x2		dmat3x2;
713 	typedef lowp_dmat3x3		dmat3x3;
714 	typedef lowp_dmat3x4		dmat3x4;
715 	typedef lowp_dmat4x2		dmat4x2;
716 	typedef lowp_dmat4x3		dmat4x3;
717 	typedef lowp_dmat4x4		dmat4x4;
718 #elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))
719 	typedef mediump_dmat2x2		dmat2x2;
720 	typedef mediump_dmat2x3		dmat2x3;
721 	typedef mediump_dmat2x4		dmat2x4;
722 	typedef mediump_dmat3x2		dmat3x2;
723 	typedef mediump_dmat3x3		dmat3x3;
724 	typedef mediump_dmat3x4		dmat3x4;
725 	typedef mediump_dmat4x2		dmat4x2;
726 	typedef mediump_dmat4x3		dmat4x3;
727 	typedef mediump_dmat4x4		dmat4x4;
728 #else //defined(GLM_PRECISION_HIGHP_DOUBLE)
729 
730 	//! 2 * 2 matrix of double-precision floating-point numbers.
731 	///
732 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
733 	typedef highp_dmat2x2		dmat2;
734 
735 	//! 3 * 3 matrix of double-precision floating-point numbers.
736 	///
737 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
738 	typedef highp_dmat3x3		dmat3;
739 
740 	//! 4 * 4 matrix of double-precision floating-point numbers.
741 	///
742 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
743 	typedef highp_dmat4x4		dmat4;
744 
745 	//! 2 * 2 matrix of double-precision floating-point numbers.
746 	///
747 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
748 	typedef highp_dmat2x2		dmat2x2;
749 
750 	//! 2 * 3 matrix of double-precision floating-point numbers.
751 	///
752 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
753 	typedef highp_dmat2x3		dmat2x3;
754 
755 	//! 2 * 4 matrix of double-precision floating-point numbers.
756 	///
757 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
758 	typedef highp_dmat2x4		dmat2x4;
759 
760 	//! 3 * 2 matrix of double-precision floating-point numbers.
761 	///
762 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
763 	typedef highp_dmat3x2		dmat3x2;
764 
765 	/// 3 * 3 matrix of double-precision floating-point numbers.
766 	///
767 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
768 	typedef highp_dmat3x3		dmat3x3;
769 
770 	/// 3 * 4 matrix of double-precision floating-point numbers.
771 	///
772 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
773 	typedef highp_dmat3x4		dmat3x4;
774 
775 	/// 4 * 2 matrix of double-precision floating-point numbers.
776 	///
777 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
778 	typedef highp_dmat4x2		dmat4x2;
779 
780 	/// 4 * 3 matrix of double-precision floating-point numbers.
781 	///
782 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
783 	typedef highp_dmat4x3		dmat4x3;
784 
785 	/// 4 * 4 matrix of double-precision floating-point numbers.
786 	///
787 	/// @see <a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>
788 	typedef highp_dmat4x4		dmat4x4;
789 
790 #endif//GLM_PRECISION
791 
792 	/// @}
793 }//namespace glm
794 
795 #endif//glm_core_type_mat
796