cglm 0.1.0 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (93) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -1
  3. data/Gemfile.lock +18 -16
  4. data/README.md +2 -0
  5. data/cglm.gemspec +3 -3
  6. data/ext/cglm/cglm-0.6.2/include/cglm/affine-mat.h +168 -0
  7. data/ext/cglm/cglm-0.6.2/include/cglm/affine.h +490 -0
  8. data/ext/cglm/cglm-0.6.2/include/cglm/applesimd.h +95 -0
  9. data/ext/cglm/cglm-0.6.2/include/cglm/bezier.h +154 -0
  10. data/ext/cglm/cglm-0.6.2/include/cglm/box.h +279 -0
  11. data/ext/cglm/cglm-0.6.2/include/cglm/call/affine.h +117 -0
  12. data/ext/cglm/cglm-0.6.2/include/cglm/call/bezier.h +31 -0
  13. data/ext/cglm/cglm-0.6.2/include/cglm/call/box.h +79 -0
  14. data/ext/cglm/cglm-0.6.2/include/cglm/call/cam.h +143 -0
  15. data/ext/cglm/cglm-0.6.2/include/cglm/call/curve.h +23 -0
  16. data/ext/cglm/cglm-0.6.2/include/cglm/call/ease.h +143 -0
  17. data/ext/cglm/cglm-0.6.2/include/cglm/call/euler.h +55 -0
  18. data/ext/cglm/cglm-0.6.2/include/cglm/call/frustum.h +41 -0
  19. data/ext/cglm/cglm-0.6.2/include/cglm/call/io.h +44 -0
  20. data/ext/cglm/cglm-0.6.2/include/cglm/call/mat3.h +86 -0
  21. data/ext/cglm/cglm-0.6.2/include/cglm/call/mat4.h +127 -0
  22. data/ext/cglm/cglm-0.6.2/include/cglm/call/plane.h +23 -0
  23. data/ext/cglm/cglm-0.6.2/include/cglm/call/project.h +33 -0
  24. data/ext/cglm/cglm-0.6.2/include/cglm/call/quat.h +159 -0
  25. data/ext/cglm/cglm-0.6.2/include/cglm/call/sphere.h +39 -0
  26. data/ext/cglm/cglm-0.6.2/include/cglm/call/vec3.h +312 -0
  27. data/ext/cglm/cglm-0.6.2/include/cglm/call/vec4.h +290 -0
  28. data/ext/cglm/cglm-0.6.2/include/cglm/call.h +36 -0
  29. data/ext/cglm/cglm-0.6.2/include/cglm/cam.h +585 -0
  30. data/ext/cglm/cglm-0.6.2/include/cglm/cglm.h +32 -0
  31. data/ext/cglm/cglm-0.6.2/include/cglm/color.h +26 -0
  32. data/ext/cglm/cglm-0.6.2/include/cglm/common.h +37 -0
  33. data/ext/cglm/cglm-0.6.2/include/cglm/curve.h +40 -0
  34. data/ext/cglm/cglm-0.6.2/include/cglm/ease.h +317 -0
  35. data/ext/cglm/cglm-0.6.2/include/cglm/euler.h +453 -0
  36. data/ext/cglm/cglm-0.6.2/include/cglm/frustum.h +255 -0
  37. data/ext/cglm/cglm-0.6.2/include/cglm/io.h +203 -0
  38. data/ext/cglm/cglm-0.6.2/include/cglm/mat3.h +422 -0
  39. data/ext/cglm/cglm-0.6.2/include/cglm/mat4.h +726 -0
  40. data/ext/cglm/cglm-0.6.2/include/cglm/plane.h +36 -0
  41. data/ext/cglm/cglm-0.6.2/include/cglm/project.h +118 -0
  42. data/ext/cglm/cglm-0.6.2/include/cglm/quat.h +828 -0
  43. data/ext/cglm/cglm-0.6.2/include/cglm/simd/arm.h +83 -0
  44. data/ext/cglm/cglm-0.6.2/include/cglm/simd/avx/affine.h +66 -0
  45. data/ext/cglm/cglm-0.6.2/include/cglm/simd/avx/mat4.h +66 -0
  46. data/ext/cglm/cglm-0.6.2/include/cglm/simd/intrin.h +90 -0
  47. data/ext/cglm/cglm-0.6.2/include/cglm/simd/neon/mat4.h +57 -0
  48. data/ext/cglm/cglm-0.6.2/include/cglm/simd/sse2/affine.h +111 -0
  49. data/ext/cglm/cglm-0.6.2/include/cglm/simd/sse2/mat3.h +59 -0
  50. data/ext/cglm/cglm-0.6.2/include/cglm/simd/sse2/mat4.h +405 -0
  51. data/ext/cglm/cglm-0.6.2/include/cglm/simd/sse2/quat.h +46 -0
  52. data/ext/cglm/cglm-0.6.2/include/cglm/simd/x86.h +192 -0
  53. data/ext/cglm/cglm-0.6.2/include/cglm/sphere.h +99 -0
  54. data/ext/cglm/cglm-0.6.2/include/cglm/struct/affine.h +337 -0
  55. data/ext/cglm/cglm-0.6.2/include/cglm/struct/box.h +256 -0
  56. data/ext/cglm/cglm-0.6.2/include/cglm/struct/cam.h +451 -0
  57. data/ext/cglm/cglm-0.6.2/include/cglm/struct/color.h +27 -0
  58. data/ext/cglm/cglm-0.6.2/include/cglm/struct/curve.h +40 -0
  59. data/ext/cglm/cglm-0.6.2/include/cglm/struct/euler.h +152 -0
  60. data/ext/cglm/cglm-0.6.2/include/cglm/struct/frustum.h +155 -0
  61. data/ext/cglm/cglm-0.6.2/include/cglm/struct/io.h +82 -0
  62. data/ext/cglm/cglm-0.6.2/include/cglm/struct/mat3.h +285 -0
  63. data/ext/cglm/cglm-0.6.2/include/cglm/struct/mat4.h +459 -0
  64. data/ext/cglm/cglm-0.6.2/include/cglm/struct/plane.h +40 -0
  65. data/ext/cglm/cglm-0.6.2/include/cglm/struct/project.h +104 -0
  66. data/ext/cglm/cglm-0.6.2/include/cglm/struct/quat.h +532 -0
  67. data/ext/cglm/cglm-0.6.2/include/cglm/struct/sphere.h +93 -0
  68. data/ext/cglm/cglm-0.6.2/include/cglm/struct/vec3-ext.h +257 -0
  69. data/ext/cglm/cglm-0.6.2/include/cglm/struct/vec3.h +970 -0
  70. data/ext/cglm/cglm-0.6.2/include/cglm/struct/vec4-ext.h +257 -0
  71. data/ext/cglm/cglm-0.6.2/include/cglm/struct/vec4.h +814 -0
  72. data/ext/cglm/cglm-0.6.2/include/cglm/struct.h +36 -0
  73. data/ext/cglm/cglm-0.6.2/include/cglm/types-struct.h +129 -0
  74. data/ext/cglm/cglm-0.6.2/include/cglm/types.h +76 -0
  75. data/ext/cglm/cglm-0.6.2/include/cglm/util.h +328 -0
  76. data/ext/cglm/cglm-0.6.2/include/cglm/vec3-ext.h +272 -0
  77. data/ext/cglm/cglm-0.6.2/include/cglm/vec3.h +1078 -0
  78. data/ext/cglm/cglm-0.6.2/include/cglm/vec4-ext.h +315 -0
  79. data/ext/cglm/cglm-0.6.2/include/cglm/vec4.h +1078 -0
  80. data/ext/cglm/cglm-0.6.2/include/cglm/version.h +15 -0
  81. data/ext/cglm/extconf.rb +2 -3
  82. data/ext/cglm/rb_cglm.h +5 -3
  83. data/ext/cglm/rb_cglm_mat3.c +3 -3
  84. data/ext/cglm/rb_cglm_mat4.c +3 -3
  85. data/ext/cglm/rb_cglm_quat.c +2 -2
  86. data/ext/cglm/rb_cglm_vec3.c +63 -61
  87. data/ext/cglm/rb_cglm_vec4.c +2 -0
  88. data/ext/cglm/ruby_pre27.h +35 -0
  89. data/lib/cglm/vec3.rb +2 -2
  90. data/lib/cglm/vec4.rb +2 -2
  91. data/lib/cglm/vector_type.rb +15 -0
  92. data/lib/cglm/version.rb +1 -1
  93. metadata +89 -13
@@ -0,0 +1,272 @@
1
+ /*
2
+ * Copyright (c), Recep Aslantas.
3
+ *
4
+ * MIT License (MIT), http://opensource.org/licenses/MIT
5
+ * Full license can be found in the LICENSE file
6
+ */
7
+
8
+ /*!
9
+ * @brief SIMD like functions
10
+ */
11
+
12
+ /*
13
+ Functions:
14
+ CGLM_INLINE void glm_vec3_broadcast(float val, vec3 d);
15
+ CGLM_INLINE void glm_vec3_fill(vec3 v, float val);
16
+ CGLM_INLINE bool glm_vec3_eq(vec3 v, float val);
17
+ CGLM_INLINE bool glm_vec3_eq_eps(vec3 v, float val);
18
+ CGLM_INLINE bool glm_vec3_eq_all(vec3 v);
19
+ CGLM_INLINE bool glm_vec3_eqv(vec3 a, vec3 b);
20
+ CGLM_INLINE bool glm_vec3_eqv_eps(vec3 a, vec3 b);
21
+ CGLM_INLINE float glm_vec3_max(vec3 v);
22
+ CGLM_INLINE float glm_vec3_min(vec3 v);
23
+ CGLM_INLINE bool glm_vec3_isnan(vec3 v);
24
+ CGLM_INLINE bool glm_vec3_isinf(vec3 v);
25
+ CGLM_INLINE bool glm_vec3_isvalid(vec3 v);
26
+ CGLM_INLINE void glm_vec3_sign(vec3 v, vec3 dest);
27
+ CGLM_INLINE void glm_vec3_abs(vec3 v, vec3 dest);
28
+ CGLM_INLINE void glm_vec3_fract(vec3 v, vec3 dest);
29
+ CGLM_INLINE float glm_vec3_hadd(vec3 v);
30
+ CGLM_INLINE void glm_vec3_sqrt(vec3 v, vec3 dest);
31
+ */
32
+
33
+ #ifndef cglm_vec3_ext_h
34
+ #define cglm_vec3_ext_h
35
+
36
+ #include "common.h"
37
+ #include "util.h"
38
+
39
+ /*!
40
+ * @brief fill a vector with specified value
41
+ *
42
+ * @param[in] val value
43
+ * @param[out] d dest
44
+ */
45
+ CGLM_INLINE
46
+ void
47
+ glm_vec3_broadcast(float val, vec3 d) {
48
+ d[0] = d[1] = d[2] = val;
49
+ }
50
+
51
+ /*!
52
+ * @brief fill a vector with specified value
53
+ *
54
+ * @param[out] v dest
55
+ * @param[in] val value
56
+ */
57
+ CGLM_INLINE
58
+ void
59
+ glm_vec3_fill(vec3 v, float val) {
60
+ v[0] = v[1] = v[2] = val;
61
+ }
62
+
63
+ /*!
64
+ * @brief check if vector is equal to value (without epsilon)
65
+ *
66
+ * @param[in] v vector
67
+ * @param[in] val value
68
+ */
69
+ CGLM_INLINE
70
+ bool
71
+ glm_vec3_eq(vec3 v, float val) {
72
+ return v[0] == val && v[0] == v[1] && v[0] == v[2];
73
+ }
74
+
75
+ /*!
76
+ * @brief check if vector is equal to value (with epsilon)
77
+ *
78
+ * @param[in] v vector
79
+ * @param[in] val value
80
+ */
81
+ CGLM_INLINE
82
+ bool
83
+ glm_vec3_eq_eps(vec3 v, float val) {
84
+ return fabsf(v[0] - val) <= FLT_EPSILON
85
+ && fabsf(v[1] - val) <= FLT_EPSILON
86
+ && fabsf(v[2] - val) <= FLT_EPSILON;
87
+ }
88
+
89
+ /*!
90
+ * @brief check if vectors members are equal (without epsilon)
91
+ *
92
+ * @param[in] v vector
93
+ */
94
+ CGLM_INLINE
95
+ bool
96
+ glm_vec3_eq_all(vec3 v) {
97
+ return v[0] == v[1] && v[0] == v[2];
98
+ }
99
+
100
+ /*!
101
+ * @brief check if vector is equal to another (without epsilon)
102
+ *
103
+ * @param[in] a vector
104
+ * @param[in] b vector
105
+ */
106
+ CGLM_INLINE
107
+ bool
108
+ glm_vec3_eqv(vec3 a, vec3 b) {
109
+ return a[0] == b[0]
110
+ && a[1] == b[1]
111
+ && a[2] == b[2];
112
+ }
113
+
114
+ /*!
115
+ * @brief check if vector is equal to another (with epsilon)
116
+ *
117
+ * @param[in] a vector
118
+ * @param[in] b vector
119
+ */
120
+ CGLM_INLINE
121
+ bool
122
+ glm_vec3_eqv_eps(vec3 a, vec3 b) {
123
+ return fabsf(a[0] - b[0]) <= FLT_EPSILON
124
+ && fabsf(a[1] - b[1]) <= FLT_EPSILON
125
+ && fabsf(a[2] - b[2]) <= FLT_EPSILON;
126
+ }
127
+
128
+ /*!
129
+ * @brief max value of vector
130
+ *
131
+ * @param[in] v vector
132
+ */
133
+ CGLM_INLINE
134
+ float
135
+ glm_vec3_max(vec3 v) {
136
+ float max;
137
+
138
+ max = v[0];
139
+ if (v[1] > max)
140
+ max = v[1];
141
+ if (v[2] > max)
142
+ max = v[2];
143
+
144
+ return max;
145
+ }
146
+
147
+ /*!
148
+ * @brief min value of vector
149
+ *
150
+ * @param[in] v vector
151
+ */
152
+ CGLM_INLINE
153
+ float
154
+ glm_vec3_min(vec3 v) {
155
+ float min;
156
+
157
+ min = v[0];
158
+ if (v[1] < min)
159
+ min = v[1];
160
+ if (v[2] < min)
161
+ min = v[2];
162
+
163
+ return min;
164
+ }
165
+
166
+ /*!
167
+ * @brief check if all items are NaN (not a number)
168
+ * you should only use this in DEBUG mode or very critical asserts
169
+ *
170
+ * @param[in] v vector
171
+ */
172
+ CGLM_INLINE
173
+ bool
174
+ glm_vec3_isnan(vec3 v) {
175
+ return isnan(v[0]) || isnan(v[1]) || isnan(v[2]);
176
+ }
177
+
178
+ /*!
179
+ * @brief check if all items are INFINITY
180
+ * you should only use this in DEBUG mode or very critical asserts
181
+ *
182
+ * @param[in] v vector
183
+ */
184
+ CGLM_INLINE
185
+ bool
186
+ glm_vec3_isinf(vec3 v) {
187
+ return isinf(v[0]) || isinf(v[1]) || isinf(v[2]);
188
+ }
189
+
190
+ /*!
191
+ * @brief check if all items are valid number
192
+ * you should only use this in DEBUG mode or very critical asserts
193
+ *
194
+ * @param[in] v vector
195
+ */
196
+ CGLM_INLINE
197
+ bool
198
+ glm_vec3_isvalid(vec3 v) {
199
+ return !glm_vec3_isnan(v) && !glm_vec3_isinf(v);
200
+ }
201
+
202
+ /*!
203
+ * @brief get sign of 32 bit float as +1, -1, 0
204
+ *
205
+ * Important: It returns 0 for zero/NaN input
206
+ *
207
+ * @param v vector
208
+ */
209
+ CGLM_INLINE
210
+ void
211
+ glm_vec3_sign(vec3 v, vec3 dest) {
212
+ dest[0] = glm_signf(v[0]);
213
+ dest[1] = glm_signf(v[1]);
214
+ dest[2] = glm_signf(v[2]);
215
+ }
216
+
217
+ /*!
218
+ * @brief absolute value of each vector item
219
+ *
220
+ * @param[in] v vector
221
+ * @param[out] dest destination vector
222
+ */
223
+ CGLM_INLINE
224
+ void
225
+ glm_vec3_abs(vec3 v, vec3 dest) {
226
+ dest[0] = fabsf(v[0]);
227
+ dest[1] = fabsf(v[1]);
228
+ dest[2] = fabsf(v[2]);
229
+ }
230
+
231
+ /*!
232
+ * @brief fractional part of each vector item
233
+ *
234
+ * @param[in] v vector
235
+ * @param[out] dest destination vector
236
+ */
237
+ CGLM_INLINE
238
+ void
239
+ glm_vec3_fract(vec3 v, vec3 dest) {
240
+ dest[0] = fminf(v[0] - floorf(v[0]), 0x1.fffffep-1f);
241
+ dest[1] = fminf(v[1] - floorf(v[1]), 0x1.fffffep-1f);
242
+ dest[2] = fminf(v[2] - floorf(v[2]), 0x1.fffffep-1f);
243
+ }
244
+
245
+ /*!
246
+ * @brief vector reduction by summation
247
+ * @warning could overflow
248
+ *
249
+ * @param[in] v vector
250
+ * @return sum of all vector's elements
251
+ */
252
+ CGLM_INLINE
253
+ float
254
+ glm_vec3_hadd(vec3 v) {
255
+ return v[0] + v[1] + v[2];
256
+ }
257
+
258
+ /*!
259
+ * @brief square root of each vector item
260
+ *
261
+ * @param[in] v vector
262
+ * @param[out] dest destination vector
263
+ */
264
+ CGLM_INLINE
265
+ void
266
+ glm_vec3_sqrt(vec3 v, vec3 dest) {
267
+ dest[0] = sqrtf(v[0]);
268
+ dest[1] = sqrtf(v[1]);
269
+ dest[2] = sqrtf(v[2]);
270
+ }
271
+
272
+ #endif /* cglm_vec3_ext_h */