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
34namespace glm{
35namespace 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