29 #ifndef glm_core_type_mat4x4
30 #define glm_core_type_mat4x4
33 #include "type_vec4.hpp"
34 #include "type_mat.hpp"
35 #if(GLM_HAS_INITIALIZER_LISTS)
36 # include <initializer_list>
37 #endif //GLM_HAS_INITIALIZER_LISTS
44 template <
typename T, precision P>
49 typedef std::size_t size_type;
50 typedef tvec4<T, P> col_type;
51 typedef tvec4<T, P> row_type;
52 typedef tmat4x4<T, P> type;
53 typedef tmat4x4<T, P> transpose_type;
55 GLM_FUNC_DECL GLM_CONSTEXPR length_t
length()
const;
57 template <
typename U, precision Q>
58 friend tvec4<U, Q> operator/(tmat4x4<U, Q>
const & m, tvec4<U, Q>
const & v);
59 template <
typename U, precision Q>
60 friend tvec4<U, Q> operator/(tvec4<U, Q>
const & v, tmat4x4<U, Q>
const & m);
68 GLM_FUNC_DECL tmat4x4();
69 GLM_FUNC_DECL tmat4x4(tmat4x4<T, P>
const & m);
70 template <precision Q>
71 GLM_FUNC_DECL tmat4x4(tmat4x4<T, Q>
const & m);
73 GLM_FUNC_DECL
explicit tmat4x4(
75 GLM_FUNC_DECL
explicit tmat4x4(
77 GLM_FUNC_DECL
explicit tmat4x4(
78 T
const & x0, T
const & y0, T
const & z0, T
const & w0,
79 T
const & x1, T
const & y1, T
const & z1, T
const & w1,
80 T
const & x2, T
const & y2, T
const & z2, T
const & w2,
81 T
const & x3, T
const & y3, T
const & z3, T
const & w3);
82 GLM_FUNC_DECL
explicit tmat4x4(
88 #if(GLM_HAS_INITIALIZER_LISTS)
90 GLM_FUNC_DECL tmat4x4(std::initializer_list<U> m);
92 GLM_FUNC_DECL tmat4x4(std::initializer_list<tvec4<T, P> > m);
93 #endif//GLM_HAS_INITIALIZER_LISTS
99 typename X1,
typename Y1,
typename Z1,
typename W1,
100 typename X2,
typename Y2,
typename Z2,
typename W2,
101 typename X3,
typename Y3,
typename Z3,
typename W3,
102 typename X4,
typename Y4,
typename Z4,
typename W4>
103 GLM_FUNC_DECL
explicit tmat4x4(
104 X1
const & x1, Y1
const & y1, Z1
const & z1, W1
const & w1,
105 X2
const & x2, Y2
const & y2, Z2
const & z2, W2
const & w2,
106 X3
const & x3, Y3
const & y3, Z3
const & z3, W3
const & w3,
107 X4
const & x4, Y4
const & y4, Z4
const & z4, W4
const & w4);
109 template <
typename V1,
typename V2,
typename V3,
typename V4>
110 GLM_FUNC_DECL
explicit tmat4x4(
111 tvec4<V1, P>
const & v1,
112 tvec4<V2, P>
const & v2,
113 tvec4<V3, P>
const & v3,
114 tvec4<V4, P>
const & v4);
117 template <
typename U, precision Q>
118 GLM_FUNC_DECL
explicit tmat4x4(tmat4x4<U, Q>
const & m);
120 GLM_FUNC_DECL
explicit tmat4x4(tmat2x2<T, P>
const & x);
121 GLM_FUNC_DECL
explicit tmat4x4(tmat3x3<T, P>
const & x);
122 GLM_FUNC_DECL
explicit tmat4x4(tmat2x3<T, P>
const & x);
123 GLM_FUNC_DECL
explicit tmat4x4(tmat3x2<T, P>
const & x);
124 GLM_FUNC_DECL
explicit tmat4x4(tmat2x4<T, P>
const & x);
125 GLM_FUNC_DECL
explicit tmat4x4(tmat4x2<T, P>
const & x);
126 GLM_FUNC_DECL
explicit tmat4x4(tmat3x4<T, P>
const & x);
127 GLM_FUNC_DECL
explicit tmat4x4(tmat4x3<T, P>
const & x);
130 GLM_FUNC_DECL col_type & operator[](length_t i);
131 GLM_FUNC_DECL col_type
const & operator[](length_t i)
const;
134 GLM_FUNC_DECL tmat4x4<T, P> & operator= (tmat4x4<T, P>
const & m);
135 template <
typename U>
136 GLM_FUNC_DECL tmat4x4<T, P> & operator= (tmat4x4<U, P>
const & m);
137 template <
typename U>
138 GLM_FUNC_DECL tmat4x4<T, P> & operator+= (U s);
139 template <
typename U>
140 GLM_FUNC_DECL tmat4x4<T, P> & operator+= (tmat4x4<U, P>
const & m);
141 template <
typename U>
142 GLM_FUNC_DECL tmat4x4<T, P> & operator-= (U s);
143 template <
typename U>
144 GLM_FUNC_DECL tmat4x4<T, P> & operator-= (tmat4x4<U, P>
const & m);
145 template <
typename U>
146 GLM_FUNC_DECL tmat4x4<T, P> & operator*= (U s);
147 template <
typename U>
148 GLM_FUNC_DECL tmat4x4<T, P> & operator*= (tmat4x4<U, P>
const & m);
149 template <
typename U>
150 GLM_FUNC_DECL tmat4x4<T, P> & operator/= (U s);
151 template <
typename U>
152 GLM_FUNC_DECL tmat4x4<T, P> & operator/= (tmat4x4<U, P>
const & m);
157 GLM_FUNC_DECL tmat4x4<T, P> & operator++ ();
158 GLM_FUNC_DECL tmat4x4<T, P> & operator-- ();
159 GLM_FUNC_DECL tmat4x4<T, P> operator++(
int);
160 GLM_FUNC_DECL tmat4x4<T, P> operator--(
int);
163 template <
typename T, precision P>
164 GLM_FUNC_DECL tmat4x4<T, P> compute_inverse_mat4(tmat4x4<T, P>
const & m);
167 template <
typename T, precision P>
168 GLM_FUNC_DECL tmat4x4<T, P> operator+ (
169 tmat4x4<T, P>
const & m,
172 template <
typename T, precision P>
173 GLM_FUNC_DECL tmat4x4<T, P> operator+ (
175 tmat4x4<T, P>
const & m);
177 template <
typename T, precision P>
178 GLM_FUNC_DECL tmat4x4<T, P> operator+ (
179 tmat4x4<T, P>
const & m1,
180 tmat4x4<T, P>
const & m2);
182 template <
typename T, precision P>
183 GLM_FUNC_DECL tmat4x4<T, P> operator- (
184 tmat4x4<T, P>
const & m,
187 template <
typename T, precision P>
188 GLM_FUNC_DECL tmat4x4<T, P> operator- (
190 tmat4x4<T, P>
const & m);
192 template <
typename T, precision P>
193 GLM_FUNC_DECL tmat4x4<T, P> operator- (
194 tmat4x4<T, P>
const & m1,
195 tmat4x4<T, P>
const & m2);
197 template <
typename T, precision P>
198 GLM_FUNC_DECL tmat4x4<T, P> operator* (
199 tmat4x4<T, P>
const & m,
202 template <
typename T, precision P>
203 GLM_FUNC_DECL tmat4x4<T, P> operator* (
205 tmat4x4<T, P>
const & m);
207 template <
typename T, precision P>
208 GLM_FUNC_DECL
typename tmat4x4<T, P>::col_type operator* (
209 tmat4x4<T, P>
const & m,
210 typename tmat4x4<T, P>::row_type
const & v);
212 template <
typename T, precision P>
213 GLM_FUNC_DECL
typename tmat4x4<T, P>::row_type operator* (
214 typename tmat4x4<T, P>::col_type
const & v,
215 tmat4x4<T, P>
const & m);
217 template <
typename T, precision P>
218 GLM_FUNC_DECL tmat2x4<T, P> operator* (
219 tmat4x4<T, P>
const & m1,
220 tmat2x4<T, P>
const & m2);
222 template <
typename T, precision P>
223 GLM_FUNC_DECL tmat3x4<T, P> operator* (
224 tmat4x4<T, P>
const & m1,
225 tmat3x4<T, P>
const & m2);
227 template <
typename T, precision P>
228 GLM_FUNC_DECL tmat4x4<T, P> operator* (
229 tmat4x4<T, P>
const & m1,
230 tmat4x4<T, P>
const & m2);
232 template <
typename T, precision P>
233 GLM_FUNC_DECL tmat4x4<T, P> operator/ (
234 tmat4x4<T, P>
const & m,
237 template <
typename T, precision P>
238 GLM_FUNC_DECL tmat4x4<T, P> operator/ (
240 tmat4x4<T, P>
const & m);
242 template <
typename T, precision P>
243 GLM_FUNC_DECL
typename tmat4x4<T, P>::col_type operator/ (
244 tmat4x4<T, P>
const & m,
245 typename tmat4x4<T, P>::row_type
const & v);
247 template <
typename T, precision P>
248 GLM_FUNC_DECL
typename tmat4x4<T, P>::row_type operator/ (
249 typename tmat4x4<T, P>::col_type & v,
250 tmat4x4<T, P>
const & m);
252 template <
typename T, precision P>
253 GLM_FUNC_DECL tmat4x4<T, P> operator/ (
254 tmat4x4<T, P>
const & m1,
255 tmat4x4<T, P>
const & m2);
258 template <
typename T, precision P>
259 GLM_FUNC_DECL tmat4x4<T, P>
const operator- (
260 tmat4x4<T, P>
const & m);
265 #ifndef GLM_EXTERNAL_TEMPLATE
266 #include "type_mat4x4.inl"
267 #endif//GLM_EXTERNAL_TEMPLATE
269 #endif//glm_core_type_mat4x4
GLM_FUNC_DECL genType::value_type length(genType const &x)
Returns the length of x, i.e., sqrt(x * x).