0.9.6
simd_mat4.hpp
Go to the documentation of this file.
1 
42 #pragma once
43 
44 // Dependencies
45 #include "../detail/setup.hpp"
46 
47 #if(GLM_ARCH != GLM_ARCH_PURE)
48 
49 #if(GLM_ARCH & GLM_ARCH_SSE2)
50 # include "../detail/intrinsic_matrix.hpp"
51 # include "../gtx/simd_vec4.hpp"
52 #else
53 # error "GLM: GLM_GTX_simd_mat4 requires compiler support of SSE2 through intrinsics"
54 #endif
55 
56 #if(defined(GLM_MESSAGES) && !defined(GLM_EXT_INCLUDED))
57 # pragma message("GLM: GLM_GTX_simd_mat4 extension included")
58 #endif
59 
60 namespace glm{
61 namespace detail
62 {
65  GLM_ALIGNED_STRUCT(16) fmat4x4SIMD
66  {
67  typedef float value_type;
68  typedef fvec4SIMD col_type;
69  typedef fvec4SIMD row_type;
70  typedef std::size_t size_type;
71  typedef fmat4x4SIMD type;
72  typedef fmat4x4SIMD transpose_type;
73 
74  GLM_FUNC_DECL length_t length() const;
75 
76  fvec4SIMD Data[4];
77 
79  // Constructors
80 
81  fmat4x4SIMD();
82  explicit fmat4x4SIMD(float const & s);
83  explicit fmat4x4SIMD(
84  float const & x0, float const & y0, float const & z0, float const & w0,
85  float const & x1, float const & y1, float const & z1, float const & w1,
86  float const & x2, float const & y2, float const & z2, float const & w2,
87  float const & x3, float const & y3, float const & z3, float const & w3);
88  explicit fmat4x4SIMD(
89  fvec4SIMD const & v0,
90  fvec4SIMD const & v1,
91  fvec4SIMD const & v2,
92  fvec4SIMD const & v3);
93  explicit fmat4x4SIMD(
94  mat4x4 const & m);
95  explicit fmat4x4SIMD(
96  __m128 const in[4]);
97 
98  // Conversions
99  //template <typename U>
100  //explicit tmat4x4(tmat4x4<U> const & m);
101 
102  //explicit tmat4x4(tmat2x2<T> const & x);
103  //explicit tmat4x4(tmat3x3<T> const & x);
104  //explicit tmat4x4(tmat2x3<T> const & x);
105  //explicit tmat4x4(tmat3x2<T> const & x);
106  //explicit tmat4x4(tmat2x4<T> const & x);
107  //explicit tmat4x4(tmat4x2<T> const & x);
108  //explicit tmat4x4(tmat3x4<T> const & x);
109  //explicit tmat4x4(tmat4x3<T> const & x);
110 
111  // Accesses
112  fvec4SIMD & operator[](length_t i);
113  fvec4SIMD const & operator[](length_t i) const;
114 
115  // Unary updatable operators
116  fmat4x4SIMD & operator= (fmat4x4SIMD const & m);
117  fmat4x4SIMD & operator+= (float const & s);
118  fmat4x4SIMD & operator+= (fmat4x4SIMD const & m);
119  fmat4x4SIMD & operator-= (float const & s);
120  fmat4x4SIMD & operator-= (fmat4x4SIMD const & m);
121  fmat4x4SIMD & operator*= (float const & s);
122  fmat4x4SIMD & operator*= (fmat4x4SIMD const & m);
123  fmat4x4SIMD & operator/= (float const & s);
124  fmat4x4SIMD & operator/= (fmat4x4SIMD const & m);
125  fmat4x4SIMD & operator++ ();
126  fmat4x4SIMD & operator-- ();
127  };
128 
129  // Binary operators
130  fmat4x4SIMD operator+ (fmat4x4SIMD const & m, float const & s);
131  fmat4x4SIMD operator+ (float const & s, fmat4x4SIMD const & m);
132  fmat4x4SIMD operator+ (fmat4x4SIMD const & m1, fmat4x4SIMD const & m2);
133 
134  fmat4x4SIMD operator- (fmat4x4SIMD const & m, float const & s);
135  fmat4x4SIMD operator- (float const & s, fmat4x4SIMD const & m);
136  fmat4x4SIMD operator- (fmat4x4SIMD const & m1, fmat4x4SIMD const & m2);
137 
138  fmat4x4SIMD operator* (fmat4x4SIMD const & m, float const & s);
139  fmat4x4SIMD operator* (float const & s, fmat4x4SIMD const & m);
140 
141  fvec4SIMD operator* (fmat4x4SIMD const & m, fvec4SIMD const & v);
142  fvec4SIMD operator* (fvec4SIMD const & v, fmat4x4SIMD const & m);
143 
144  fmat4x4SIMD operator* (fmat4x4SIMD const & m1, fmat4x4SIMD const & m2);
145 
146  fmat4x4SIMD operator/ (fmat4x4SIMD const & m, float const & s);
147  fmat4x4SIMD operator/ (float const & s, fmat4x4SIMD const & m);
148 
149  fvec4SIMD operator/ (fmat4x4SIMD const & m, fvec4SIMD const & v);
150  fvec4SIMD operator/ (fvec4SIMD const & v, fmat4x4SIMD const & m);
151 
152  fmat4x4SIMD operator/ (fmat4x4SIMD const & m1, fmat4x4SIMD const & m2);
153 
154  // Unary constant operators
155  fmat4x4SIMD const operator- (fmat4x4SIMD const & m);
156  fmat4x4SIMD const operator-- (fmat4x4SIMD const & m, int);
157  fmat4x4SIMD const operator++ (fmat4x4SIMD const & m, int);
158 }//namespace detail
159 
160  typedef detail::fmat4x4SIMD simdMat4;
161 
164 
167  mat4 mat4_cast(
168  detail::fmat4x4SIMD const & x);
169 
173  detail::fmat4x4SIMD matrixCompMult(
174  detail::fmat4x4SIMD const & x,
175  detail::fmat4x4SIMD const & y);
176 
181  detail::fmat4x4SIMD outerProduct(
182  detail::fvec4SIMD const & c,
183  detail::fvec4SIMD const & r);
184 
187  detail::fmat4x4SIMD transpose(
188  detail::fmat4x4SIMD const & x);
189 
192  float determinant(
193  detail::fmat4x4SIMD const & m);
194 
197  detail::fmat4x4SIMD inverse(
198  detail::fmat4x4SIMD const & m);
199 
201 }// namespace glm
202 
203 #include "simd_mat4.inl"
204 
205 #endif//(GLM_ARCH != GLM_ARCH_PURE)
mat4x4 mat4
4 columns of 4 components matrix of floating-point numbers.
Definition: type_mat.hpp:442
GLM_FUNC_DECL T length(vecType< T, P > const &x)
Returns the length of x, i.e., sqrt(x * x).
highp_mat4x4 mat4x4
4 columns of 4 components matrix of floating-point numbers.
Definition: type_mat.hpp:425
GLM_FUNC_DECL detail::outerProduct_trait< T, P, vecTypeA, vecTypeB >::type outerProduct(vecTypeA< T, P > const &c, vecTypeB< T, P > const &r)
Treats the first parameter c as a column vector and the second parameter r as a row vector and does a...
Definition: _noise.hpp:39
GLM_FUNC_DECL matType< T, P > inverse(matType< T, P > const &m)
Return the inverse of a squared matrix.
GLM_FUNC_DECL tmat4x4< T, P > mat4_cast(tquat< T, P > const &x)
Converts a quaternion to a 4 * 4 matrix.
GLM_FUNC_DECL matType< T, P > matrixCompMult(matType< T, P > const &x, matType< T, P > const &y)
Multiply matrix x by matrix y component-wise, i.e., result[i][j] is the scalar product of x[i][j] and...
GLM_FUNC_DECL T determinant(matType< T, P > const &m)
Returns the transposed matrix of x.