master
  1/**
  2 * This file has no copyright assigned and is placed in the Public Domain.
  3 * This file is part of the mingw-w64 runtime package.
  4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  5 */
  6
  7#ifndef DIRECTXMATH_H
  8#define DIRECTXMATH_H
  9
 10#ifndef __cplusplus
 11#error DirectX Math requires C++
 12#endif
 13
 14#include <stdint.h>
 15
 16#define DIRECTX_MATH_VERSION 314
 17
 18#define XM_CONST const
 19#if __cplusplus >= 201103L
 20#define XM_CONSTEXPR constexpr
 21#else
 22#define XM_CONSTEXPR
 23#endif
 24
 25namespace DirectX {
 26
 27struct XMFLOAT2 {
 28  float x, y;
 29  XMFLOAT2() = default;
 30  XMFLOAT2(const XMFLOAT2&) = default;
 31  XMFLOAT2& operator=(const XMFLOAT2&) = default;
 32  XMFLOAT2(XMFLOAT2&&) = default;
 33  XMFLOAT2& operator=(XMFLOAT2&&) = default;
 34  XM_CONSTEXPR XMFLOAT2(float _x, float _y) : x(_x), y(_y) {}
 35  explicit XMFLOAT2(const float *pArray) : x(pArray[0]), y(pArray[1]) {}
 36};
 37
 38struct __attribute__ ((__aligned__ (16))) XMFLOAT2A : public XMFLOAT2 {
 39  XMFLOAT2A() = default;
 40  XMFLOAT2A(const XMFLOAT2A&) = default;
 41  XMFLOAT2A& operator=(const XMFLOAT2A&) = default;
 42  XMFLOAT2A(XMFLOAT2A&&) = default;
 43  XMFLOAT2A& operator=(XMFLOAT2A&&) = default;
 44  XM_CONSTEXPR XMFLOAT2A(float _x, float _y) : XMFLOAT2(_x, _y) {}
 45  explicit XMFLOAT2A(const float *pArray) : XMFLOAT2(pArray) {}
 46};
 47
 48struct XMINT2 {
 49  int32_t x, y;
 50  XMINT2() = default;
 51  XMINT2(const XMINT2&) = default;
 52  XMINT2& operator=(const XMINT2&) = default;
 53  XMINT2(XMINT2&&) = default;
 54  XMINT2& operator=(XMINT2&&) = default;
 55  XM_CONSTEXPR XMINT2(int32_t _x, int32_t _y) : x(_x), y(_y) {}
 56  explicit XMINT2(const int32_t *pArray) : x(pArray[0]), y(pArray[1]) {}
 57};
 58
 59struct XMUINT2 {
 60  uint32_t x, y;
 61  XMUINT2() = default;
 62  XMUINT2(const XMUINT2&) = default;
 63  XMUINT2& operator=(const XMUINT2&) = default;
 64  XMUINT2(XMUINT2&&) = default;
 65  XMUINT2& operator=(XMUINT2&&) = default;
 66  XM_CONSTEXPR XMUINT2(uint32_t _x, uint32_t _y) : x(_x), y(_y) {}
 67  explicit XMUINT2(const uint32_t *pArray) : x(pArray[0]), y(pArray[1]) {}
 68};
 69
 70struct XMFLOAT3 {
 71  float x, y, z;
 72  XMFLOAT3() = default;
 73  XMFLOAT3(const XMFLOAT3&) = default;
 74  XMFLOAT3& operator=(const XMFLOAT3&) = default;
 75  XMFLOAT3(XMFLOAT3&&) = default;
 76  XMFLOAT3& operator=(XMFLOAT3&&) = default;
 77  XM_CONSTEXPR XMFLOAT3(float _x, float _y, float _z) : x(_x), y(_y), z(_z) {}
 78  explicit XMFLOAT3(const float *pArray) : x(pArray[0]), y(pArray[1]), z(pArray[2]) {}
 79};
 80
 81struct __attribute__ ((__aligned__ (16))) XMFLOAT3A : public XMFLOAT3 {
 82  XMFLOAT3A() = default;
 83  XMFLOAT3A(const XMFLOAT3A&) = default;
 84  XMFLOAT3A& operator=(const XMFLOAT3A&) = default;
 85  XMFLOAT3A(XMFLOAT3A&&) = default;
 86  XMFLOAT3A& operator=(XMFLOAT3A&&) = default;
 87  XM_CONSTEXPR XMFLOAT3A(float _x, float _y, float _z) : XMFLOAT3(_x, _y, _z) {}
 88  explicit XMFLOAT3A(const float *pArray) : XMFLOAT3(pArray) {}
 89};
 90
 91struct XMINT3 {
 92  int32_t x, y, z;
 93  XMINT3() = default;
 94  XMINT3(const XMINT3&) = default;
 95  XMINT3& operator=(const XMINT3&) = default;
 96  XMINT3(XMINT3&&) = default;
 97  XMINT3& operator=(XMINT3&&) = default;
 98  XM_CONSTEXPR XMINT3(int32_t _x, int32_t _y, int32_t _z) : x(_x), y(_y), z(_z) {}
 99  explicit XMINT3(const int32_t *pArray) : x(pArray[0]), y(pArray[1]), z(pArray[2]) {}
100};
101
102struct XMUINT3 {
103  uint32_t x, y, z;
104  XMUINT3() = default;
105  XMUINT3(const XMUINT3&) = default;
106  XMUINT3& operator=(const XMUINT3&) = default;
107  XMUINT3(XMUINT3&&) = default;
108  XMUINT3& operator=(XMUINT3&&) = default;
109  XM_CONSTEXPR XMUINT3(uint32_t _x, uint32_t _y, uint32_t _z) : x(_x), y(_y), z(_z) {}
110  explicit XMUINT3(const uint32_t *pArray) : x(pArray[0]), y(pArray[1]), z(pArray[2]) {}
111};
112
113struct XMFLOAT4 {
114  float x, y, z, w;
115  XMFLOAT4() = default;
116  XMFLOAT4(const XMFLOAT4&) = default;
117  XMFLOAT4& operator=(const XMFLOAT4&) = default;
118  XMFLOAT4(XMFLOAT4&&) = default;
119  XMFLOAT4& operator=(XMFLOAT4&&) = default;
120  XM_CONSTEXPR XMFLOAT4(float _x, float _y, float _z, float _w) : x(_x), y(_y), z(_z), w(_w) {}
121  explicit XMFLOAT4(const float *pArray) : x(pArray[0]), y(pArray[1]), z(pArray[2]), w(pArray[3]) {}
122};
123
124struct __attribute__ ((__aligned__ (16))) XMFLOAT4A : public XMFLOAT4 {
125  XMFLOAT4A() = default;
126  XMFLOAT4A(const XMFLOAT4A&) = default;
127  XMFLOAT4A& operator=(const XMFLOAT4A&) = default;
128  XMFLOAT4A(XMFLOAT4A&&) = default;
129  XMFLOAT4A& operator=(XMFLOAT4A&&) = default;
130  XM_CONSTEXPR XMFLOAT4A(float _x, float _y, float _z, float _w) : XMFLOAT4(_x, _y, _z, _w) {}
131  explicit XMFLOAT4A(const float *pArray) : XMFLOAT4(pArray) {}
132};
133
134struct XMINT4 {
135  int32_t x, y, z, w;
136  XMINT4() = default;
137  XMINT4(const XMINT4&) = default;
138  XMINT4& operator=(const XMINT4&) = default;
139  XMINT4(XMINT4&&) = default;
140  XMINT4& operator=(XMINT4&&) = default;
141  XM_CONSTEXPR XMINT4(int32_t _x, int32_t _y, int32_t _z, int32_t _w) : x(_x), y(_y), z(_z), w(_w) {}
142  explicit XMINT4(const int32_t *pArray) : x(pArray[0]), y(pArray[1]), z(pArray[2]), w(pArray[3]) {}
143};
144
145struct XMUINT4 {
146  uint32_t x, y, z, w;
147  XMUINT4() = default;
148  XMUINT4(const XMUINT4&) = default;
149  XMUINT4& operator=(const XMUINT4&) = default;
150  XMUINT4(XMUINT4&&) = default;
151  XMUINT4& operator=(XMUINT4&&) = default;
152  XM_CONSTEXPR XMUINT4(uint32_t _x, uint32_t _y, uint32_t _z, uint32_t _w) : x(_x), y(_y), z(_z), w(_w) {}
153  explicit XMUINT4(const uint32_t *pArray) : x(pArray[0]), y(pArray[1]), z(pArray[2]), w(pArray[3]) {}
154};
155
156struct XMFLOAT3X3 {
157  union
158  {
159    struct
160    {
161      float _11, _12, _13;
162      float _21, _22, _23;
163      float _31, _32, _33;
164    };
165    float m[3][3];
166  };
167
168  XMFLOAT3X3() = default;
169  XMFLOAT3X3(const XMFLOAT3X3&) = default;
170  XMFLOAT3X3& operator=(const XMFLOAT3X3&) = default;
171  XMFLOAT3X3(XMFLOAT3X3&&) = default;
172  XMFLOAT3X3& operator=(XMFLOAT3X3&&) = default;
173  XM_CONSTEXPR XMFLOAT3X3(
174    float m00, float m01, float m02,
175    float m10, float m11, float m12,
176    float m20, float m21, float m22)
177    : _11(m00), _12(m01), _13(m02),
178      _21(m10), _22(m11), _23(m12),
179      _31(m20), _32(m21), _33(m22) {}
180  explicit XMFLOAT3X3(const float *pArray);
181  float operator() (size_t Row, size_t Column) const { return m[Row][Column]; }
182  float& operator() (size_t Row, size_t Column) { return m[Row][Column]; }
183  };
184
185struct XMFLOAT4X3 {
186  union
187  {
188    struct
189    {
190      float _11, _12, _13;
191      float _21, _22, _23;
192      float _31, _32, _33;
193      float _41, _42, _43;
194    };
195    float m[4][3];
196    float f[12];
197  };
198
199  XMFLOAT4X3() = default;
200  XMFLOAT4X3(const XMFLOAT4X3&) = default;
201  XMFLOAT4X3& operator=(const XMFLOAT4X3&) = default;
202  XMFLOAT4X3(XMFLOAT4X3&&) = default;
203  XMFLOAT4X3& operator=(XMFLOAT4X3&&) = default;
204  XM_CONSTEXPR XMFLOAT4X3(
205    float m00, float m01, float m02,
206    float m10, float m11, float m12,
207    float m20, float m21, float m22,
208    float m30, float m31, float m32)
209    : _11(m00), _12(m01), _13(m02),
210      _21(m10), _22(m11), _23(m12),
211      _31(m20), _32(m21), _33(m22),
212      _41(m30), _42(m31), _43(m32) {}
213  explicit XMFLOAT4X3(const float *pArray);
214  float operator() (size_t Row, size_t Column) const { return m[Row][Column]; }
215  float& operator() (size_t Row, size_t Column) { return m[Row][Column]; }
216};
217
218struct __attribute__ ((__aligned__ (16))) XMFLOAT4X3A : public XMFLOAT4X3 {
219  XMFLOAT4X3A() = default;
220  XMFLOAT4X3A(const XMFLOAT4X3A&) = default;
221  XMFLOAT4X3A& operator=(const XMFLOAT4X3A&) = default;
222  XMFLOAT4X3A(XMFLOAT4X3A&&) = default;
223  XMFLOAT4X3A& operator=(XMFLOAT4X3A&&) = default;
224  XM_CONSTEXPR XMFLOAT4X3A(
225    float m00, float m01, float m02,
226    float m10, float m11, float m12,
227    float m20, float m21, float m22,
228    float m30, float m31, float m32) :
229    XMFLOAT4X3(m00,m01,m02,m10,m11,m12,m20,m21,m22,m30,m31,m32) {}
230  explicit XMFLOAT4X3A(const float *pArray) : XMFLOAT4X3(pArray) {}
231};
232
233struct XMFLOAT3X4 {
234  union
235  {
236    struct
237    {
238      float _11, _12, _13, _14;
239      float _21, _22, _23, _24;
240      float _31, _32, _33, _34;
241    };
242    float m[3][4];
243    float f[12];
244  };
245
246  XMFLOAT3X4() = default;
247  XMFLOAT3X4(const XMFLOAT3X4&) = default;
248  XMFLOAT3X4& operator=(const XMFLOAT3X4&) = default;
249  XMFLOAT3X4(XMFLOAT3X4&&) = default;
250  XMFLOAT3X4& operator=(XMFLOAT3X4&&) = default;
251  XM_CONSTEXPR XMFLOAT3X4(
252    float m00, float m01, float m02, float m03,
253    float m10, float m11, float m12, float m13,
254    float m20, float m21, float m22, float m23)
255    : _11(m00), _12(m01), _13(m02), _14(m03),
256      _21(m10), _22(m11), _23(m12), _24(m13),
257      _31(m20), _32(m21), _33(m22), _34(m23) {}
258  explicit XMFLOAT3X4(const float *pArray);
259  float operator() (size_t Row, size_t Column) const { return m[Row][Column]; }
260  float& operator() (size_t Row, size_t Column) { return m[Row][Column]; }
261};
262
263struct __attribute__ ((__aligned__ (16))) XMFLOAT3X4A : public XMFLOAT3X4 {
264  XMFLOAT3X4A() = default;
265  XMFLOAT3X4A(const XMFLOAT3X4A&) = default;
266  XMFLOAT3X4A& operator=(const XMFLOAT3X4A&) = default;
267  XMFLOAT3X4A(XMFLOAT3X4A&&) = default;
268  XMFLOAT3X4A& operator=(XMFLOAT3X4A&&) = default;
269  XM_CONSTEXPR XMFLOAT3X4A(
270    float m00, float m01, float m02, float m03,
271    float m10, float m11, float m12, float m13,
272    float m20, float m21, float m22, float m23) :
273    XMFLOAT3X4(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23) {}
274  explicit XMFLOAT3X4A(const float *pArray) : XMFLOAT3X4(pArray) {}
275};
276
277struct XMFLOAT4X4 {
278  union
279  {
280    struct
281    {
282      float _11, _12, _13, _14;
283      float _21, _22, _23, _24;
284      float _31, _32, _33, _34;
285      float _41, _42, _43, _44;
286    };
287    float m[4][4];
288  };
289
290  XMFLOAT4X4() = default;
291  XMFLOAT4X4(const XMFLOAT4X4&) = default;
292  XMFLOAT4X4& operator=(const XMFLOAT4X4&) = default;
293  XMFLOAT4X4(XMFLOAT4X4&&) = default;
294  XMFLOAT4X4& operator=(XMFLOAT4X4&&) = default;
295  XM_CONSTEXPR XMFLOAT4X4(
296    float m00, float m01, float m02, float m03,
297    float m10, float m11, float m12, float m13,
298    float m20, float m21, float m22, float m23,
299    float m30, float m31, float m32, float m33)
300    : _11(m00), _12(m01), _13(m02), _14(m03),
301      _21(m10), _22(m11), _23(m12), _24(m13),
302      _31(m20), _32(m21), _33(m22), _34(m23),
303      _41(m30), _42(m31), _43(m32), _44(m33) {}
304  explicit XMFLOAT4X4(const float *pArray);
305  float operator() (size_t Row, size_t Column) const { return m[Row][Column]; }
306  float& operator() (size_t Row, size_t Column) { return m[Row][Column]; }
307};
308
309struct __attribute__ ((__aligned__ (16))) XMFLOAT4X4A : public XMFLOAT4X4 {
310  XMFLOAT4X4A() = default;
311  XMFLOAT4X4A(const XMFLOAT4X4A&) = default;
312  XMFLOAT4X4A& operator=(const XMFLOAT4X4A&) = default;
313  XMFLOAT4X4A(XMFLOAT4X4A&&) = default;
314  XMFLOAT4X4A& operator=(XMFLOAT4X4A&&) = default;
315  XM_CONSTEXPR XMFLOAT4X4A(
316    float m00, float m01, float m02, float m03,
317    float m10, float m11, float m12, float m13,
318    float m20, float m21, float m22, float m23,
319    float m30, float m31, float m32, float m33)
320    : XMFLOAT4X4(m00,m01,m02,m03,m10,m11,m12,m13,m20,m21,m22,m23,m30,m31,m32,m33) {}
321  explicit XMFLOAT4X4A(const float *pArray) : XMFLOAT4X4(pArray) {}
322};
323
324} /* namespace DirectX */
325
326#endif /* DIRECTXMATH_H */