Blender  V2.93
math_vector_inline.c
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
17  * All rights reserved.
18  *
19  * The Original Code is: some of this file.
20  */
21 
26 #ifndef __MATH_VECTOR_INLINE_C__
27 #define __MATH_VECTOR_INLINE_C__
28 
29 #include "BLI_math.h"
30 
31 /********************************** Init *************************************/
32 
33 MINLINE void zero_v2(float r[2])
34 {
35  r[0] = 0.0f;
36  r[1] = 0.0f;
37 }
38 
39 MINLINE void zero_v3(float r[3])
40 {
41  r[0] = 0.0f;
42  r[1] = 0.0f;
43  r[2] = 0.0f;
44 }
45 
46 MINLINE void zero_v4(float r[4])
47 {
48  r[0] = 0.0f;
49  r[1] = 0.0f;
50  r[2] = 0.0f;
51  r[3] = 0.0f;
52 }
53 
54 MINLINE void copy_v2_v2(float r[2], const float a[2])
55 {
56  r[0] = a[0];
57  r[1] = a[1];
58 }
59 
60 MINLINE void copy_v3_v3(float r[3], const float a[3])
61 {
62  r[0] = a[0];
63  r[1] = a[1];
64  r[2] = a[2];
65 }
66 
67 MINLINE void copy_v3fl_v3s(float r[3], const short a[3])
68 {
69  r[0] = (float)a[0];
70  r[1] = (float)a[1];
71  r[2] = (float)a[2];
72 }
73 
74 MINLINE void copy_v4_v4(float r[4], const float a[4])
75 {
76  r[0] = a[0];
77  r[1] = a[1];
78  r[2] = a[2];
79  r[3] = a[3];
80 }
81 
82 MINLINE void copy_v2_fl(float r[2], float f)
83 {
84  r[0] = f;
85  r[1] = f;
86 }
87 
88 MINLINE void copy_v3_fl(float r[3], float f)
89 {
90  r[0] = f;
91  r[1] = f;
92  r[2] = f;
93 }
94 
95 MINLINE void copy_v4_fl(float r[4], float f)
96 {
97  r[0] = f;
98  r[1] = f;
99  r[2] = f;
100  r[3] = f;
101 }
102 
103 /* unsigned char */
104 MINLINE void copy_v2_v2_uchar(unsigned char r[2], const unsigned char a[2])
105 {
106  r[0] = a[0];
107  r[1] = a[1];
108 }
109 
110 MINLINE void copy_v3_v3_uchar(unsigned char r[3], const unsigned char a[3])
111 {
112  r[0] = a[0];
113  r[1] = a[1];
114  r[2] = a[2];
115 }
116 
117 MINLINE void copy_v4_v4_uchar(unsigned char r[4], const unsigned char a[4])
118 {
119  r[0] = a[0];
120  r[1] = a[1];
121  r[2] = a[2];
122  r[3] = a[3];
123 }
124 
125 MINLINE void copy_v2_uchar(unsigned char r[2], const unsigned char a)
126 {
127  r[0] = a;
128  r[1] = a;
129 }
130 
131 MINLINE void copy_v3_uchar(unsigned char r[3], const unsigned char a)
132 {
133  r[0] = a;
134  r[1] = a;
135  r[2] = a;
136 }
137 
138 MINLINE void copy_v4_uchar(unsigned char r[4], const unsigned char a)
139 {
140  r[0] = a;
141  r[1] = a;
142  r[2] = a;
143  r[3] = a;
144 }
145 
146 /* char */
147 MINLINE void copy_v2_v2_char(char r[2], const char a[2])
148 {
149  r[0] = a[0];
150  r[1] = a[1];
151 }
152 
153 MINLINE void copy_v3_v3_char(char r[3], const char a[3])
154 {
155  r[0] = a[0];
156  r[1] = a[1];
157  r[2] = a[2];
158 }
159 
160 MINLINE void copy_v4_v4_char(char r[4], const char a[4])
161 {
162  r[0] = a[0];
163  r[1] = a[1];
164  r[2] = a[2];
165  r[3] = a[3];
166 }
167 
168 /* short */
169 
170 MINLINE void copy_v2_v2_short(short r[2], const short a[2])
171 {
172  r[0] = a[0];
173  r[1] = a[1];
174 }
175 
176 MINLINE void copy_v3_v3_short(short r[3], const short a[3])
177 {
178  r[0] = a[0];
179  r[1] = a[1];
180  r[2] = a[2];
181 }
182 
183 MINLINE void copy_v4_v4_short(short r[4], const short a[4])
184 {
185  r[0] = a[0];
186  r[1] = a[1];
187  r[2] = a[2];
188  r[3] = a[3];
189 }
190 
191 /* int */
192 MINLINE void zero_v2_int(int r[2])
193 {
194  r[0] = 0;
195  r[1] = 0;
196 }
197 
198 MINLINE void zero_v3_int(int r[3])
199 {
200  r[0] = 0;
201  r[1] = 0;
202  r[2] = 0;
203 }
204 
205 MINLINE void copy_v2_v2_int(int r[2], const int a[2])
206 {
207  r[0] = a[0];
208  r[1] = a[1];
209 }
210 
211 MINLINE void copy_v3_v3_int(int r[3], const int a[3])
212 {
213  r[0] = a[0];
214  r[1] = a[1];
215  r[2] = a[2];
216 }
217 
218 MINLINE void copy_v4_v4_int(int r[4], const int a[4])
219 {
220  r[0] = a[0];
221  r[1] = a[1];
222  r[2] = a[2];
223  r[3] = a[3];
224 }
225 
226 /* double */
227 MINLINE void zero_v3_db(double r[3])
228 {
229  r[0] = 0.0;
230  r[1] = 0.0;
231  r[2] = 0.0;
232 }
233 
234 MINLINE void copy_v2_v2_db(double r[2], const double a[2])
235 {
236  r[0] = a[0];
237  r[1] = a[1];
238 }
239 
240 MINLINE void copy_v3_v3_db(double r[3], const double a[3])
241 {
242  r[0] = a[0];
243  r[1] = a[1];
244  r[2] = a[2];
245 }
246 
247 MINLINE void copy_v4_v4_db(double r[4], const double a[4])
248 {
249  r[0] = a[0];
250  r[1] = a[1];
251  r[2] = a[2];
252  r[3] = a[3];
253 }
254 
255 /* int <-> float */
256 MINLINE void round_v2i_v2fl(int r[2], const float a[2])
257 {
258  r[0] = (int)roundf(a[0]);
259  r[1] = (int)roundf(a[1]);
260 }
261 
262 MINLINE void copy_v2fl_v2i(float r[2], const int a[2])
263 {
264  r[0] = (float)a[0];
265  r[1] = (float)a[1];
266 }
267 
268 /* double -> float */
269 MINLINE void copy_v2fl_v2db(float r[2], const double a[2])
270 {
271  r[0] = (float)a[0];
272  r[1] = (float)a[1];
273 }
274 
275 MINLINE void copy_v3fl_v3db(float r[3], const double a[3])
276 {
277  r[0] = (float)a[0];
278  r[1] = (float)a[1];
279  r[2] = (float)a[2];
280 }
281 
282 MINLINE void copy_v4fl_v4db(float r[4], const double a[4])
283 {
284  r[0] = (float)a[0];
285  r[1] = (float)a[1];
286  r[2] = (float)a[2];
287  r[3] = (float)a[3];
288 }
289 
290 /* float -> double */
291 MINLINE void copy_v2db_v2fl(double r[2], const float a[2])
292 {
293  r[0] = (double)a[0];
294  r[1] = (double)a[1];
295 }
296 
297 MINLINE void copy_v3db_v3fl(double r[3], const float a[3])
298 {
299  r[0] = (double)a[0];
300  r[1] = (double)a[1];
301  r[2] = (double)a[2];
302 }
303 
304 MINLINE void copy_v4db_v4fl(double r[4], const float a[4])
305 {
306  r[0] = (double)a[0];
307  r[1] = (double)a[1];
308  r[2] = (double)a[2];
309  r[3] = (double)a[3];
310 }
311 
312 MINLINE void swap_v2_v2(float a[2], float b[2])
313 {
314  SWAP(float, a[0], b[0]);
315  SWAP(float, a[1], b[1]);
316 }
317 
318 MINLINE void swap_v3_v3(float a[3], float b[3])
319 {
320  SWAP(float, a[0], b[0]);
321  SWAP(float, a[1], b[1]);
322  SWAP(float, a[2], b[2]);
323 }
324 
325 MINLINE void swap_v4_v4(float a[4], float b[4])
326 {
327  SWAP(float, a[0], b[0]);
328  SWAP(float, a[1], b[1]);
329  SWAP(float, a[2], b[2]);
330  SWAP(float, a[3], b[3]);
331 }
332 
333 /* float args -> vec */
334 MINLINE void copy_v2_fl2(float v[2], float x, float y)
335 {
336  v[0] = x;
337  v[1] = y;
338 }
339 
340 MINLINE void copy_v3_fl3(float v[3], float x, float y, float z)
341 {
342  v[0] = x;
343  v[1] = y;
344  v[2] = z;
345 }
346 
347 MINLINE void copy_v4_fl4(float v[4], float x, float y, float z, float w)
348 {
349  v[0] = x;
350  v[1] = y;
351  v[2] = z;
352  v[3] = w;
353 }
354 
355 /********************************* Arithmetic ********************************/
356 
357 MINLINE void add_v2_fl(float r[2], float f)
358 {
359  r[0] += f;
360  r[1] += f;
361 }
362 
363 MINLINE void add_v3_fl(float r[3], float f)
364 {
365  r[0] += f;
366  r[1] += f;
367  r[2] += f;
368 }
369 
370 MINLINE void add_v4_fl(float r[4], float f)
371 {
372  r[0] += f;
373  r[1] += f;
374  r[2] += f;
375  r[3] += f;
376 }
377 
378 MINLINE void add_v2_v2(float r[2], const float a[2])
379 {
380  r[0] += a[0];
381  r[1] += a[1];
382 }
383 
384 MINLINE void add_v2_v2_db(double r[2], const double a[2])
385 {
386  r[0] += a[0];
387  r[1] += a[1];
388 }
389 
390 MINLINE void add_v2_v2v2(float r[2], const float a[2], const float b[2])
391 {
392  r[0] = a[0] + b[0];
393  r[1] = a[1] + b[1];
394 }
395 
396 MINLINE void add_v2_v2_int(int r[2], const int a[2])
397 {
398  r[0] = r[0] + a[0];
399  r[1] = r[1] + a[1];
400 }
401 
402 MINLINE void add_v2_v2v2_int(int r[2], const int a[2], const int b[2])
403 {
404  r[0] = a[0] + b[0];
405  r[1] = a[1] + b[1];
406 }
407 
408 MINLINE void add_v3_v3(float r[3], const float a[3])
409 {
410  r[0] += a[0];
411  r[1] += a[1];
412  r[2] += a[2];
413 }
414 
415 MINLINE void add_v3_v3_db(double r[3], const double a[3])
416 {
417  r[0] += a[0];
418  r[1] += a[1];
419  r[2] += a[2];
420 }
421 
422 MINLINE void add_v3_v3v3(float r[3], const float a[3], const float b[3])
423 {
424  r[0] = a[0] + b[0];
425  r[1] = a[1] + b[1];
426  r[2] = a[2] + b[2];
427 }
428 
429 MINLINE void add_v3fl_v3fl_v3i(float r[3], const float a[3], const int b[3])
430 {
431  r[0] = a[0] + (float)b[0];
432  r[1] = a[1] + (float)b[1];
433  r[2] = a[2] + (float)b[2];
434 }
435 
436 MINLINE void add_v3fl_v3fl_v3s(float r[3], const float a[3], const short b[3])
437 {
438  r[0] = a[0] + (float)b[0];
439  r[1] = a[1] + (float)b[1];
440  r[2] = a[2] + (float)b[2];
441 }
442 
443 MINLINE void add_v4_v4(float r[4], const float a[4])
444 {
445  r[0] += a[0];
446  r[1] += a[1];
447  r[2] += a[2];
448  r[3] += a[3];
449 }
450 
451 MINLINE void add_v4_v4v4(float r[4], const float a[4], const float b[4])
452 {
453  r[0] = a[0] + b[0];
454  r[1] = a[1] + b[1];
455  r[2] = a[2] + b[2];
456  r[3] = a[3] + b[3];
457 }
458 
459 MINLINE void sub_v2_v2(float r[2], const float a[2])
460 {
461  r[0] -= a[0];
462  r[1] -= a[1];
463 }
464 
465 MINLINE void sub_v2_v2v2(float r[2], const float a[2], const float b[2])
466 {
467  r[0] = a[0] - b[0];
468  r[1] = a[1] - b[1];
469 }
470 
471 MINLINE void sub_v2_v2v2_db(double r[2], const double a[2], const double b[2])
472 {
473  r[0] = a[0] - b[0];
474  r[1] = a[1] - b[1];
475 }
476 
477 MINLINE void sub_v2_v2v2_int(int r[2], const int a[2], const int b[2])
478 {
479  r[0] = a[0] - b[0];
480  r[1] = a[1] - b[1];
481 }
482 
483 MINLINE void sub_v3_v3(float r[3], const float a[3])
484 {
485  r[0] -= a[0];
486  r[1] -= a[1];
487  r[2] -= a[2];
488 }
489 
490 MINLINE void sub_v3_v3v3(float r[3], const float a[3], const float b[3])
491 {
492  r[0] = a[0] - b[0];
493  r[1] = a[1] - b[1];
494  r[2] = a[2] - b[2];
495 }
496 
497 MINLINE void sub_v3_v3v3_int(int r[3], const int a[3], const int b[3])
498 {
499  r[0] = a[0] - b[0];
500  r[1] = a[1] - b[1];
501  r[2] = a[2] - b[2];
502 }
503 
504 MINLINE void sub_v3_v3v3_db(double r[3], const double a[3], const double b[3])
505 {
506  r[0] = a[0] - b[0];
507  r[1] = a[1] - b[1];
508  r[2] = a[2] - b[2];
509 }
510 
511 MINLINE void sub_v2db_v2fl_v2fl(double r[2], const float a[2], const float b[2])
512 {
513  r[0] = (double)a[0] - (double)b[0];
514  r[1] = (double)a[1] - (double)b[1];
515 }
516 
517 MINLINE void sub_v3db_v3fl_v3fl(double r[3], const float a[3], const float b[3])
518 {
519  r[0] = (double)a[0] - (double)b[0];
520  r[1] = (double)a[1] - (double)b[1];
521  r[2] = (double)a[2] - (double)b[2];
522 }
523 
524 MINLINE void sub_v4_v4(float r[4], const float a[4])
525 {
526  r[0] -= a[0];
527  r[1] -= a[1];
528  r[2] -= a[2];
529  r[3] -= a[3];
530 }
531 
532 MINLINE void sub_v4_v4v4(float r[4], const float a[4], const float b[4])
533 {
534  r[0] = a[0] - b[0];
535  r[1] = a[1] - b[1];
536  r[2] = a[2] - b[2];
537  r[3] = a[3] - b[3];
538 }
539 
540 MINLINE void mul_v2_fl(float r[2], float f)
541 {
542  r[0] *= f;
543  r[1] *= f;
544 }
545 
546 MINLINE void mul_v2_v2fl(float r[2], const float a[2], float f)
547 {
548  r[0] = a[0] * f;
549  r[1] = a[1] * f;
550 }
551 
552 MINLINE void mul_v3_fl(float r[3], float f)
553 {
554  r[0] *= f;
555  r[1] *= f;
556  r[2] *= f;
557 }
558 
559 MINLINE void mul_v3db_db(double r[3], double f)
560 {
561  r[0] *= f;
562  r[1] *= f;
563  r[2] *= f;
564 }
565 
566 MINLINE void mul_v3_v3fl(float r[3], const float a[3], float f)
567 {
568  r[0] = a[0] * f;
569  r[1] = a[1] * f;
570  r[2] = a[2] * f;
571 }
572 
573 MINLINE void mul_v3_v3db_db(double r[3], const double a[3], double f)
574 {
575  r[0] = a[0] * f;
576  r[1] = a[1] * f;
577  r[2] = a[2] * f;
578 }
579 
580 MINLINE void mul_v2_v2(float r[2], const float a[2])
581 {
582  r[0] *= a[0];
583  r[1] *= a[1];
584 }
585 
586 MINLINE void mul_v3_v3(float r[3], const float a[3])
587 {
588  r[0] *= a[0];
589  r[1] *= a[1];
590  r[2] *= a[2];
591 }
592 
593 MINLINE void mul_v4_fl(float r[4], float f)
594 {
595  r[0] *= f;
596  r[1] *= f;
597  r[2] *= f;
598  r[3] *= f;
599 }
600 
601 MINLINE void mul_v4_v4(float r[4], const float a[4])
602 {
603  r[0] *= a[0];
604  r[1] *= a[1];
605  r[2] *= a[2];
606  r[3] *= a[3];
607 }
608 
609 MINLINE void mul_v4_v4fl(float r[4], const float a[4], float f)
610 {
611  r[0] = a[0] * f;
612  r[1] = a[1] * f;
613  r[2] = a[2] * f;
614  r[3] = a[3] * f;
615 }
616 
626 MINLINE void mul_v2_v2_cw(float r[2], const float mat[2], const float vec[2])
627 {
628  BLI_assert(r != vec);
629 
630  r[0] = mat[0] * vec[0] + (+mat[1]) * vec[1];
631  r[1] = mat[1] * vec[0] + (-mat[0]) * vec[1];
632 }
633 
634 MINLINE void mul_v2_v2_ccw(float r[2], const float mat[2], const float vec[2])
635 {
636  BLI_assert(r != vec);
637 
638  r[0] = mat[0] * vec[0] + (-mat[1]) * vec[1];
639  r[1] = mat[1] * vec[0] + (+mat[0]) * vec[1];
640 }
641 
654 MINLINE float mul_project_m4_v3_zfac(const float mat[4][4], const float co[3])
655 {
656  return (mat[0][3] * co[0]) + (mat[1][3] * co[1]) + (mat[2][3] * co[2]) + mat[3][3];
657 }
658 
662 MINLINE float dot_m3_v3_row_x(const float M[3][3], const float a[3])
663 {
664  return M[0][0] * a[0] + M[1][0] * a[1] + M[2][0] * a[2];
665 }
666 MINLINE float dot_m3_v3_row_y(const float M[3][3], const float a[3])
667 {
668  return M[0][1] * a[0] + M[1][1] * a[1] + M[2][1] * a[2];
669 }
670 MINLINE float dot_m3_v3_row_z(const float M[3][3], const float a[3])
671 {
672  return M[0][2] * a[0] + M[1][2] * a[1] + M[2][2] * a[2];
673 }
674 
679 MINLINE float dot_m4_v3_row_x(const float M[4][4], const float a[3])
680 {
681  return M[0][0] * a[0] + M[1][0] * a[1] + M[2][0] * a[2];
682 }
683 MINLINE float dot_m4_v3_row_y(const float M[4][4], const float a[3])
684 {
685  return M[0][1] * a[0] + M[1][1] * a[1] + M[2][1] * a[2];
686 }
687 MINLINE float dot_m4_v3_row_z(const float M[4][4], const float a[3])
688 {
689  return M[0][2] * a[0] + M[1][2] * a[1] + M[2][2] * a[2];
690 }
691 
692 MINLINE void madd_v2_v2fl(float r[2], const float a[2], float f)
693 {
694  r[0] += a[0] * f;
695  r[1] += a[1] * f;
696 }
697 
698 MINLINE void madd_v3_v3fl(float r[3], const float a[3], float f)
699 {
700  r[0] += a[0] * f;
701  r[1] += a[1] * f;
702  r[2] += a[2] * f;
703 }
704 
705 MINLINE void madd_v3_v3v3(float r[3], const float a[3], const float b[3])
706 {
707  r[0] += a[0] * b[0];
708  r[1] += a[1] * b[1];
709  r[2] += a[2] * b[2];
710 }
711 
712 MINLINE void madd_v2_v2v2fl(float r[2], const float a[2], const float b[2], float f)
713 {
714  r[0] = a[0] + b[0] * f;
715  r[1] = a[1] + b[1] * f;
716 }
717 
718 MINLINE void madd_v3_v3v3fl(float r[3], const float a[3], const float b[3], float f)
719 {
720  r[0] = a[0] + b[0] * f;
721  r[1] = a[1] + b[1] * f;
722  r[2] = a[2] + b[2] * f;
723 }
724 
725 MINLINE void madd_v3_v3v3v3(float r[3], const float a[3], const float b[3], const float c[3])
726 {
727  r[0] = a[0] + b[0] * c[0];
728  r[1] = a[1] + b[1] * c[1];
729  r[2] = a[2] + b[2] * c[2];
730 }
731 
733  const float a[3],
734  const float b[3],
735  const int c[3])
736 {
737  r[0] = a[0] + b[0] * (float)c[0];
738  r[1] = a[1] + b[1] * (float)c[1];
739  r[2] = a[2] + b[2] * (float)c[2];
740 }
741 
742 MINLINE void madd_v4_v4fl(float r[4], const float a[4], float f)
743 {
744  r[0] += a[0] * f;
745  r[1] += a[1] * f;
746  r[2] += a[2] * f;
747  r[3] += a[3] * f;
748 }
749 
750 MINLINE void madd_v4_v4v4(float r[4], const float a[4], const float b[4])
751 {
752  r[0] += a[0] * b[0];
753  r[1] += a[1] * b[1];
754  r[2] += a[2] * b[2];
755  r[3] += a[3] * b[3];
756 }
757 
758 MINLINE void mul_v3_v3v3(float r[3], const float v1[3], const float v2[3])
759 {
760  r[0] = v1[0] * v2[0];
761  r[1] = v1[1] * v2[1];
762  r[2] = v1[2] * v2[2];
763 }
764 
765 MINLINE void mul_v2_v2v2(float r[2], const float a[2], const float b[2])
766 {
767  r[0] = a[0] * b[0];
768  r[1] = a[1] * b[1];
769 }
770 
771 MINLINE void negate_v2(float r[2])
772 {
773  r[0] = -r[0];
774  r[1] = -r[1];
775 }
776 
777 MINLINE void negate_v2_v2(float r[2], const float a[2])
778 {
779  r[0] = -a[0];
780  r[1] = -a[1];
781 }
782 
783 MINLINE void negate_v3(float r[3])
784 {
785  r[0] = -r[0];
786  r[1] = -r[1];
787  r[2] = -r[2];
788 }
789 
790 MINLINE void negate_v3_v3(float r[3], const float a[3])
791 {
792  r[0] = -a[0];
793  r[1] = -a[1];
794  r[2] = -a[2];
795 }
796 
797 MINLINE void negate_v4(float r[4])
798 {
799  r[0] = -r[0];
800  r[1] = -r[1];
801  r[2] = -r[2];
802  r[3] = -r[3];
803 }
804 
805 MINLINE void negate_v4_v4(float r[4], const float a[4])
806 {
807  r[0] = -a[0];
808  r[1] = -a[1];
809  r[2] = -a[2];
810  r[3] = -a[3];
811 }
812 
813 /* could add more... */
814 MINLINE void negate_v3_short(short r[3])
815 {
816  r[0] = (short)-r[0];
817  r[1] = (short)-r[1];
818  r[2] = (short)-r[2];
819 }
820 
821 MINLINE void negate_v3_db(double r[3])
822 {
823  r[0] = -r[0];
824  r[1] = -r[1];
825  r[2] = -r[2];
826 }
827 
828 MINLINE void invert_v2(float r[2])
829 {
830  BLI_assert(!ELEM(0.0f, r[0], r[1]));
831  r[0] = 1.0f / r[0];
832  r[1] = 1.0f / r[1];
833 }
834 
835 MINLINE void invert_v3(float r[3])
836 {
837  BLI_assert(!ELEM(0.0f, r[0], r[1], r[2]));
838  r[0] = 1.0f / r[0];
839  r[1] = 1.0f / r[1];
840  r[2] = 1.0f / r[2];
841 }
842 
843 MINLINE void abs_v2(float r[2])
844 {
845  r[0] = fabsf(r[0]);
846  r[1] = fabsf(r[1]);
847 }
848 
849 MINLINE void abs_v2_v2(float r[2], const float a[2])
850 {
851  r[0] = fabsf(a[0]);
852  r[1] = fabsf(a[1]);
853 }
854 
855 MINLINE void abs_v3(float r[3])
856 {
857  r[0] = fabsf(r[0]);
858  r[1] = fabsf(r[1]);
859  r[2] = fabsf(r[2]);
860 }
861 
862 MINLINE void abs_v3_v3(float r[3], const float a[3])
863 {
864  r[0] = fabsf(a[0]);
865  r[1] = fabsf(a[1]);
866  r[2] = fabsf(a[2]);
867 }
868 
869 MINLINE void abs_v4(float r[4])
870 {
871  r[0] = fabsf(r[0]);
872  r[1] = fabsf(r[1]);
873  r[2] = fabsf(r[2]);
874  r[3] = fabsf(r[3]);
875 }
876 
877 MINLINE void abs_v4_v4(float r[4], const float a[4])
878 {
879  r[0] = fabsf(a[0]);
880  r[1] = fabsf(a[1]);
881  r[2] = fabsf(a[2]);
882  r[3] = fabsf(a[3]);
883 }
884 
885 MINLINE float dot_v2v2(const float a[2], const float b[2])
886 {
887  return a[0] * b[0] + a[1] * b[1];
888 }
889 
890 MINLINE double dot_v2v2_db(const double a[2], const double b[2])
891 {
892  return a[0] * b[0] + a[1] * b[1];
893 }
894 
895 MINLINE float dot_v3v3(const float a[3], const float b[3])
896 {
897  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
898 }
899 
900 MINLINE float dot_v3v3v3(const float p[3], const float a[3], const float b[3])
901 {
902  float vec1[3], vec2[3];
903 
904  sub_v3_v3v3(vec1, a, p);
905  sub_v3_v3v3(vec2, b, p);
906  if (is_zero_v3(vec1) || is_zero_v3(vec2)) {
907  return 0.0f;
908  }
909  return dot_v3v3(vec1, vec2);
910 }
911 
912 MINLINE float dot_v4v4(const float a[4], const float b[4])
913 {
914  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
915 }
916 
917 MINLINE double dot_v3db_v3fl(const double a[3], const float b[3])
918 {
919  return a[0] * (double)b[0] + a[1] * (double)b[1] + a[2] * (double)b[2];
920 }
921 
922 MINLINE double dot_v3v3_db(const double a[3], const double b[3])
923 {
924  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
925 }
926 
927 MINLINE float cross_v2v2(const float a[2], const float b[2])
928 {
929  return a[0] * b[1] - a[1] * b[0];
930 }
931 
932 MINLINE double cross_v2v2_db(const double a[2], const double b[2])
933 {
934  return a[0] * b[1] - a[1] * b[0];
935 }
936 
937 MINLINE void cross_v3_v3v3(float r[3], const float a[3], const float b[3])
938 {
939  BLI_assert(r != a && r != b);
940  r[0] = a[1] * b[2] - a[2] * b[1];
941  r[1] = a[2] * b[0] - a[0] * b[2];
942  r[2] = a[0] * b[1] - a[1] * b[0];
943 }
944 
945 /* cross product suffers from severe precision loss when vectors are
946  * nearly parallel or opposite; doing the computation in double helps a lot */
947 MINLINE void cross_v3_v3v3_hi_prec(float r[3], const float a[3], const float b[3])
948 {
949  BLI_assert(r != a && r != b);
950  r[0] = (float)((double)a[1] * (double)b[2] - (double)a[2] * (double)b[1]);
951  r[1] = (float)((double)a[2] * (double)b[0] - (double)a[0] * (double)b[2]);
952  r[2] = (float)((double)a[0] * (double)b[1] - (double)a[1] * (double)b[0]);
953 }
954 
955 MINLINE void cross_v3_v3v3_db(double r[3], const double a[3], const double b[3])
956 {
957  BLI_assert(r != a && r != b);
958  r[0] = a[1] * b[2] - a[2] * b[1];
959  r[1] = a[2] * b[0] - a[0] * b[2];
960  r[2] = a[0] * b[1] - a[1] * b[0];
961 }
962 
963 /* Newell's Method */
964 /* excuse this fairly specific function,
965  * its used for polygon normals all over the place
966  * could use a better name */
967 MINLINE void add_newell_cross_v3_v3v3(float n[3], const float v_prev[3], const float v_curr[3])
968 {
969  n[0] += (v_prev[1] - v_curr[1]) * (v_prev[2] + v_curr[2]);
970  n[1] += (v_prev[2] - v_curr[2]) * (v_prev[0] + v_curr[0]);
971  n[2] += (v_prev[0] - v_curr[0]) * (v_prev[1] + v_curr[1]);
972 }
973 
974 MINLINE void star_m3_v3(float rmat[3][3], float a[3])
975 {
976  rmat[0][0] = rmat[1][1] = rmat[2][2] = 0.0;
977  rmat[0][1] = -a[2];
978  rmat[0][2] = a[1];
979  rmat[1][0] = a[2];
980  rmat[1][2] = -a[0];
981  rmat[2][0] = -a[1];
982  rmat[2][1] = a[0];
983 }
984 
985 /*********************************** Length **********************************/
986 
987 MINLINE float len_squared_v2(const float v[2])
988 {
989  return v[0] * v[0] + v[1] * v[1];
990 }
991 
992 MINLINE float len_squared_v3(const float v[3])
993 {
994  return v[0] * v[0] + v[1] * v[1] + v[2] * v[2];
995 }
996 
997 MINLINE double len_squared_v3_db(const double v[3])
998 {
999  return v[0] * v[0] + v[1] * v[1] + v[2] * v[2];
1000 }
1001 
1002 MINLINE float len_manhattan_v2(const float v[2])
1003 {
1004  return fabsf(v[0]) + fabsf(v[1]);
1005 }
1006 
1007 MINLINE int len_manhattan_v2_int(const int v[2])
1008 {
1009  return abs(v[0]) + abs(v[1]);
1010 }
1011 
1012 MINLINE float len_manhattan_v3(const float v[3])
1013 {
1014  return fabsf(v[0]) + fabsf(v[1]) + fabsf(v[2]);
1015 }
1016 
1017 MINLINE float len_v2(const float v[2])
1018 {
1019  return sqrtf(v[0] * v[0] + v[1] * v[1]);
1020 }
1021 
1022 MINLINE double len_v2_db(const double v[2])
1023 {
1024  return sqrt(v[0] * v[0] + v[1] * v[1]);
1025 }
1026 
1027 MINLINE float len_v2v2(const float v1[2], const float v2[2])
1028 {
1029  float x, y;
1030 
1031  x = v1[0] - v2[0];
1032  y = v1[1] - v2[1];
1033  return sqrtf(x * x + y * y);
1034 }
1035 
1036 MINLINE double len_v2v2_db(const double v1[2], const double v2[2])
1037 {
1038  double x, y;
1039 
1040  x = v1[0] - v2[0];
1041  y = v1[1] - v2[1];
1042  return sqrt(x * x + y * y);
1043 }
1044 
1045 MINLINE float len_v2v2_int(const int v1[2], const int v2[2])
1046 {
1047  float x, y;
1048 
1049  x = (float)(v1[0] - v2[0]);
1050  y = (float)(v1[1] - v2[1]);
1051  return sqrtf(x * x + y * y);
1052 }
1053 
1054 MINLINE float len_v3(const float a[3])
1055 {
1056  return sqrtf(dot_v3v3(a, a));
1057 }
1058 
1059 MINLINE double len_v3_db(const double a[3])
1060 {
1061  return sqrt(dot_v3v3_db(a, a));
1062 }
1063 
1064 MINLINE float len_squared_v2v2(const float a[2], const float b[2])
1065 {
1066  float d[2];
1067 
1068  sub_v2_v2v2(d, b, a);
1069  return dot_v2v2(d, d);
1070 }
1071 
1072 MINLINE double len_squared_v2v2_db(const double a[2], const double b[2])
1073 {
1074  double d[2];
1075 
1076  sub_v2_v2v2_db(d, b, a);
1077  return dot_v2v2_db(d, d);
1078 }
1079 
1080 MINLINE float len_squared_v3v3(const float a[3], const float b[3])
1081 {
1082  float d[3];
1083 
1084  sub_v3_v3v3(d, b, a);
1085  return dot_v3v3(d, d);
1086 }
1087 
1088 MINLINE float len_squared_v4v4(const float a[4], const float b[4])
1089 {
1090  float d[4];
1091 
1092  sub_v4_v4v4(d, b, a);
1093  return dot_v4v4(d, d);
1094 }
1095 
1096 MINLINE float len_manhattan_v2v2(const float a[2], const float b[2])
1097 {
1098  float d[2];
1099 
1100  sub_v2_v2v2(d, b, a);
1101  return len_manhattan_v2(d);
1102 }
1103 
1104 MINLINE int len_manhattan_v2v2_int(const int a[2], const int b[2])
1105 {
1106  int d[2];
1107 
1108  sub_v2_v2v2_int(d, b, a);
1109  return len_manhattan_v2_int(d);
1110 }
1111 
1112 MINLINE float len_manhattan_v3v3(const float a[3], const float b[3])
1113 {
1114  float d[3];
1115 
1116  sub_v3_v3v3(d, b, a);
1117  return len_manhattan_v3(d);
1118 }
1119 
1120 MINLINE float len_v3v3(const float a[3], const float b[3])
1121 {
1122  float d[3];
1123 
1124  sub_v3_v3v3(d, b, a);
1125  return len_v3(d);
1126 }
1127 
1128 MINLINE float normalize_v2_v2_length(float r[2], const float a[2], const float unit_length)
1129 {
1130  float d = dot_v2v2(a, a);
1131 
1132  if (d > 1.0e-35f) {
1133  d = sqrtf(d);
1134  mul_v2_v2fl(r, a, unit_length / d);
1135  }
1136  else {
1137  zero_v2(r);
1138  d = 0.0f;
1139  }
1140 
1141  return d;
1142 }
1143 MINLINE float normalize_v2_v2(float r[2], const float a[2])
1144 {
1145  return normalize_v2_v2_length(r, a, 1.0f);
1146 }
1147 
1148 MINLINE float normalize_v2(float n[2])
1149 {
1150  return normalize_v2_v2(n, n);
1151 }
1152 
1153 MINLINE float normalize_v2_length(float n[2], const float unit_length)
1154 {
1155  return normalize_v2_v2_length(n, n, unit_length);
1156 }
1157 
1158 MINLINE float normalize_v3_v3_length(float r[3], const float a[3], const float unit_length)
1159 {
1160  float d = dot_v3v3(a, a);
1161 
1162  /* a larger value causes normalize errors in a
1163  * scaled down models with camera extreme close */
1164  if (d > 1.0e-35f) {
1165  d = sqrtf(d);
1166  mul_v3_v3fl(r, a, unit_length / d);
1167  }
1168  else {
1169  zero_v3(r);
1170  d = 0.0f;
1171  }
1172 
1173  return d;
1174 }
1175 MINLINE float normalize_v3_v3(float r[3], const float a[3])
1176 {
1177  return normalize_v3_v3_length(r, a, 1.0f);
1178 }
1179 
1180 MINLINE double normalize_v3_v3_length_db(double r[3], const double a[3], double const unit_length)
1181 {
1182  double d = dot_v3v3_db(a, a);
1183 
1184  /* a larger value causes normalize errors in a
1185  * scaled down models with camera extreme close */
1186  if (d > 1.0e-70) {
1187  d = sqrt(d);
1188  mul_v3_v3db_db(r, a, unit_length / d);
1189  }
1190  else {
1191  zero_v3_db(r);
1192  d = 0.0;
1193  }
1194 
1195  return d;
1196 }
1197 MINLINE double normalize_v3_v3_db(double r[3], const double a[3])
1198 {
1199  return normalize_v3_v3_length_db(r, a, 1.0);
1200 }
1201 
1202 MINLINE double normalize_v3_length_db(double n[3], const double unit_length)
1203 {
1204  double d = n[0] * n[0] + n[1] * n[1] + n[2] * n[2];
1205 
1206  /* a larger value causes normalize errors in a
1207  * scaled down models with camera extreme close */
1208  if (d > 1.0e-35) {
1209  double mul;
1210 
1211  d = sqrt(d);
1212  mul = unit_length / d;
1213 
1214  n[0] *= mul;
1215  n[1] *= mul;
1216  n[2] *= mul;
1217  }
1218  else {
1219  n[0] = n[1] = n[2] = 0;
1220  d = 0.0;
1221  }
1222 
1223  return d;
1224 }
1225 MINLINE double normalize_v3_db(double n[3])
1226 {
1227  return normalize_v3_length_db(n, 1.0);
1228 }
1229 
1230 MINLINE float normalize_v3_length(float n[3], const float unit_length)
1231 {
1232  return normalize_v3_v3_length(n, n, unit_length);
1233 }
1234 
1235 MINLINE float normalize_v3(float n[3])
1236 {
1237  return normalize_v3_v3(n, n);
1238 }
1239 
1240 MINLINE void normal_float_to_short_v2(short out[2], const float in[2])
1241 {
1242  out[0] = (short)(in[0] * 32767.0f);
1243  out[1] = (short)(in[1] * 32767.0f);
1244 }
1245 
1246 MINLINE void normal_short_to_float_v3(float out[3], const short in[3])
1247 {
1248  out[0] = in[0] * (1.0f / 32767.0f);
1249  out[1] = in[1] * (1.0f / 32767.0f);
1250  out[2] = in[2] * (1.0f / 32767.0f);
1251 }
1252 
1253 MINLINE void normal_float_to_short_v3(short out[3], const float in[3])
1254 {
1255  out[0] = (short)(in[0] * 32767.0f);
1256  out[1] = (short)(in[1] * 32767.0f);
1257  out[2] = (short)(in[2] * 32767.0f);
1258 }
1259 
1260 MINLINE void normal_float_to_short_v4(short out[4], const float in[4])
1261 {
1262  out[0] = (short)(in[0] * 32767.0f);
1263  out[1] = (short)(in[1] * 32767.0f);
1264  out[2] = (short)(in[2] * 32767.0f);
1265  out[3] = (short)(in[3] * 32767.0f);
1266 }
1267 
1268 /********************************* Comparison ********************************/
1269 
1270 MINLINE bool is_zero_v2(const float v[2])
1271 {
1272  return (v[0] == 0.0f && v[1] == 0.0f);
1273 }
1274 
1275 MINLINE bool is_zero_v3(const float v[3])
1276 {
1277  return (v[0] == 0.0f && v[1] == 0.0f && v[2] == 0.0f);
1278 }
1279 
1280 MINLINE bool is_zero_v4(const float v[4])
1281 {
1282  return (v[0] == 0.0f && v[1] == 0.0f && v[2] == 0.0f && v[3] == 0.0f);
1283 }
1284 
1285 MINLINE bool is_zero_v2_db(const double v[2])
1286 {
1287  return (v[0] == 0.0 && v[1] == 0.0);
1288 }
1289 
1290 MINLINE bool is_zero_v3_db(const double v[3])
1291 {
1292  return (v[0] == 0.0 && v[1] == 0.0 && v[2] == 0.0);
1293 }
1294 
1295 MINLINE bool is_zero_v4_db(const double v[4])
1296 {
1297  return (v[0] == 0.0 && v[1] == 0.0 && v[2] == 0.0 && v[3] == 0.0);
1298 }
1299 
1300 MINLINE bool is_one_v3(const float v[3])
1301 {
1302  return (v[0] == 1.0f && v[1] == 1.0f && v[2] == 1.0f);
1303 }
1304 
1305 /* -------------------------------------------------------------------- */
1311 MINLINE bool equals_v2v2(const float v1[2], const float v2[2])
1312 {
1313  return ((v1[0] == v2[0]) && (v1[1] == v2[1]));
1314 }
1315 
1316 MINLINE bool equals_v3v3(const float v1[3], const float v2[3])
1317 {
1318  return ((v1[0] == v2[0]) && (v1[1] == v2[1]) && (v1[2] == v2[2]));
1319 }
1320 
1321 MINLINE bool equals_v4v4(const float v1[4], const float v2[4])
1322 {
1323  return ((v1[0] == v2[0]) && (v1[1] == v2[1]) && (v1[2] == v2[2]) && (v1[3] == v2[3]));
1324 }
1325 
1326 MINLINE bool equals_v2v2_int(const int v1[2], const int v2[2])
1327 {
1328  return ((v1[0] == v2[0]) && (v1[1] == v2[1]));
1329 }
1330 
1331 MINLINE bool equals_v3v3_int(const int v1[3], const int v2[3])
1332 {
1333  return ((v1[0] == v2[0]) && (v1[1] == v2[1]) && (v1[2] == v2[2]));
1334 }
1335 
1336 MINLINE bool equals_v4v4_int(const int v1[4], const int v2[4])
1337 {
1338  return ((v1[0] == v2[0]) && (v1[1] == v2[1]) && (v1[2] == v2[2]) && (v1[3] == v2[3]));
1339 }
1340 
1341 MINLINE bool compare_v2v2(const float v1[2], const float v2[2], const float limit)
1342 {
1343  return (compare_ff(v1[0], v2[0], limit) && compare_ff(v1[1], v2[1], limit));
1344 }
1345 
1346 MINLINE bool compare_v3v3(const float v1[3], const float v2[3], const float limit)
1347 {
1348  return (compare_ff(v1[0], v2[0], limit) && compare_ff(v1[1], v2[1], limit) &&
1349  compare_ff(v1[2], v2[2], limit));
1350 }
1351 
1352 MINLINE bool compare_v4v4(const float v1[4], const float v2[4], const float limit)
1353 {
1354  return (compare_ff(v1[0], v2[0], limit) && compare_ff(v1[1], v2[1], limit) &&
1355  compare_ff(v1[2], v2[2], limit) && compare_ff(v1[3], v2[3], limit));
1356 }
1357 
1358 MINLINE bool compare_v2v2_relative(const float v1[2],
1359  const float v2[2],
1360  const float limit,
1361  const int max_ulps)
1362 {
1363  return (compare_ff_relative(v1[0], v2[0], limit, max_ulps) &&
1364  compare_ff_relative(v1[1], v2[1], limit, max_ulps));
1365 }
1366 
1367 MINLINE bool compare_v3v3_relative(const float v1[3],
1368  const float v2[3],
1369  const float limit,
1370  const int max_ulps)
1371 {
1372  return (compare_ff_relative(v1[0], v2[0], limit, max_ulps) &&
1373  compare_ff_relative(v1[1], v2[1], limit, max_ulps) &&
1374  compare_ff_relative(v1[2], v2[2], limit, max_ulps));
1375 }
1376 
1377 MINLINE bool compare_v4v4_relative(const float v1[4],
1378  const float v2[4],
1379  const float limit,
1380  const int max_ulps)
1381 {
1382  return (compare_ff_relative(v1[0], v2[0], limit, max_ulps) &&
1383  compare_ff_relative(v1[1], v2[1], limit, max_ulps) &&
1384  compare_ff_relative(v1[2], v2[2], limit, max_ulps) &&
1385  compare_ff_relative(v1[3], v2[3], limit, max_ulps));
1386 }
1387 
1388 MINLINE bool compare_len_v3v3(const float v1[3], const float v2[3], const float limit)
1389 {
1390  float d[3];
1391  sub_v3_v3v3(d, v1, v2);
1392  return (dot_v3v3(d, d) <= (limit * limit));
1393 }
1394 
1395 MINLINE bool compare_size_v3v3(const float v1[3], const float v2[3], const float limit)
1396 {
1397  for (int i = 0; i < 3; i++) {
1398  if (v2[i] == 0.0f) {
1399  /* Catch division by zero. */
1400  if (v1[i] != v2[i]) {
1401  return false;
1402  }
1403  }
1404  else {
1405  if (fabsf(v1[i] / v2[i] - 1.0f) > limit) {
1406  return false;
1407  }
1408  }
1409  }
1410  return true;
1411 }
1412 
1413 /* -------------------------------------------------------------------- */
1417 MINLINE void clamp_v2(float vec[2], const float min, const float max)
1418 {
1419  CLAMP(vec[0], min, max);
1420  CLAMP(vec[1], min, max);
1421 }
1422 
1423 MINLINE void clamp_v3(float vec[3], const float min, const float max)
1424 {
1425  CLAMP(vec[0], min, max);
1426  CLAMP(vec[1], min, max);
1427  CLAMP(vec[2], min, max);
1428 }
1429 
1430 MINLINE void clamp_v4(float vec[4], const float min, const float max)
1431 {
1432  CLAMP(vec[0], min, max);
1433  CLAMP(vec[1], min, max);
1434  CLAMP(vec[2], min, max);
1435  CLAMP(vec[3], min, max);
1436 }
1437 
1438 MINLINE void clamp_v2_v2v2(float vec[2], const float min[2], const float max[2])
1439 {
1440  CLAMP(vec[0], min[0], max[0]);
1441  CLAMP(vec[1], min[1], max[1]);
1442 }
1443 
1444 MINLINE void clamp_v3_v3v3(float vec[3], const float min[3], const float max[3])
1445 {
1446  CLAMP(vec[0], min[0], max[0]);
1447  CLAMP(vec[1], min[1], max[1]);
1448  CLAMP(vec[2], min[2], max[2]);
1449 }
1450 
1451 MINLINE void clamp_v4_v4v4(float vec[4], const float min[4], const float max[4])
1452 {
1453  CLAMP(vec[0], min[0], max[0]);
1454  CLAMP(vec[1], min[1], max[1]);
1455  CLAMP(vec[2], min[2], max[2]);
1456  CLAMP(vec[3], min[3], max[3]);
1457 }
1458 
1473 MINLINE float line_point_side_v2(const float l1[2], const float l2[2], const float pt[2])
1474 {
1475  return (((l1[0] - pt[0]) * (l2[1] - pt[1])) - ((l2[0] - pt[0]) * (l1[1] - pt[1])));
1476 }
1477 
1480 #endif /* __MATH_VECTOR_INLINE_C__ */
typedef float(TangentPoint)[2]
#define BLI_assert(a)
Definition: BLI_assert.h:58
sqrt(x)+1/max(0
MINLINE int compare_ff(float a, float b, const float max_diff)
MINLINE int compare_ff_relative(float a, float b, const float max_diff, const int max_ulps)
#define MINLINE
#define SWAP(type, a, b)
#define ELEM(...)
typedef double(DMatrix)[4][4]
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble z
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble GLdouble r _GL_VOID_RET _GL_VOID GLfloat GLfloat r _GL_VOID_RET _GL_VOID GLint GLint r _GL_VOID_RET _GL_VOID GLshort GLshort r _GL_VOID_RET _GL_VOID GLdouble GLdouble r
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble v1
Group RGB to Bright Vector Camera CLAMP
ATTR_WARN_UNUSED_RESULT const BMVert * v2
ATTR_WARN_UNUSED_RESULT const BMVert * v
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
Definition: btQuadWord.h:119
static void mul(btAlignedObjectArray< T > &items, const Q &value)
#define fabsf(x)
#define sqrtf(x)
MINLINE void sub_v3db_v3fl_v3fl(double r[3], const float a[3], const float b[3])
MINLINE float dot_v2v2(const float a[2], const float b[2])
MINLINE double normalize_v3_db(double n[3])
MINLINE double normalize_v3_v3_length_db(double r[3], const double a[3], double const unit_length)
MINLINE void mul_v4_fl(float r[4], float f)
MINLINE int len_manhattan_v2v2_int(const int a[2], const int b[2])
MINLINE double normalize_v3_v3_db(double r[3], const double a[3])
MINLINE void madd_v3_v3v3v3(float r[3], const float a[3], const float b[3], const float c[3])
MINLINE void sub_v2_v2v2_int(int r[2], const int a[2], const int b[2])
MINLINE void round_v2i_v2fl(int r[2], const float a[2])
MINLINE void add_v4_v4(float r[4], const float a[4])
MINLINE void copy_v4_v4(float r[4], const float a[4])
MINLINE void copy_v2fl_v2i(float r[2], const int a[2])
MINLINE void swap_v4_v4(float a[4], float b[4])
MINLINE void copy_v3fl_v3s(float r[3], const short a[3])
MINLINE void abs_v4(float r[4])
MINLINE float len_squared_v3v3(const float a[3], const float b[3])
MINLINE void copy_v3_uchar(unsigned char r[3], const unsigned char a)
MINLINE void add_v3fl_v3fl_v3i(float r[3], const float a[3], const int b[3])
MINLINE void madd_v3_v3fl(float r[3], const float a[3], float f)
MINLINE void add_v3_fl(float r[3], float f)
MINLINE void mul_v2_v2_cw(float r[2], const float mat[2], const float vec[2])
MINLINE void clamp_v4_v4v4(float vec[4], const float min[4], const float max[4])
MINLINE void copy_v2_fl2(float v[2], float x, float y)
MINLINE void mul_v2_v2v2(float r[2], const float a[2], const float b[2])
MINLINE void madd_v2_v2fl(float r[2], const float a[2], float f)
MINLINE void copy_v4_fl4(float v[4], float x, float y, float z, float w)
MINLINE void add_v4_v4v4(float r[4], const float a[4], const float b[4])
MINLINE void madd_v2_v2v2fl(float r[2], const float a[2], const float b[2], float f)
MINLINE float dot_v4v4(const float a[4], const float b[4])
MINLINE void add_v3fl_v3fl_v3s(float r[3], const float a[3], const short b[3])
MINLINE void swap_v2_v2(float a[2], float b[2])
MINLINE void madd_v3fl_v3fl_v3fl_v3i(float r[3], const float a[3], const float b[3], const int c[3])
MINLINE void copy_v2db_v2fl(double r[2], const float a[2])
MINLINE bool equals_v3v3_int(const int v1[3], const int v2[3])
MINLINE void copy_v2_v2_db(double r[2], const double a[2])
MINLINE float dot_m3_v3_row_x(const float M[3][3], const float a[3])
MINLINE void mul_v4_v4(float r[4], const float a[4])
MINLINE void sub_v2_v2(float r[2], const float a[2])
MINLINE void copy_v4_v4_char(char r[4], const char a[4])
MINLINE bool equals_v4v4_int(const int v1[4], const int v2[4])
MINLINE bool compare_v3v3(const float v1[3], const float v2[3], const float limit)
MINLINE void copy_v4_uchar(unsigned char r[4], const unsigned char a)
MINLINE void mul_v3_v3(float r[3], const float a[3])
MINLINE float len_v2v2_int(const int v1[2], const int v2[2])
MINLINE double normalize_v3_length_db(double n[3], const double unit_length)
MINLINE void sub_v3_v3(float r[3], const float a[3])
MINLINE bool is_zero_v3(const float v[3])
MINLINE float dot_m4_v3_row_z(const float M[4][4], const float a[3])
MINLINE void mul_v2_v2_ccw(float r[2], const float mat[2], const float vec[2])
MINLINE double len_squared_v3_db(const double v[3])
MINLINE void cross_v3_v3v3_hi_prec(float r[3], const float a[3], const float b[3])
MINLINE void add_v2_v2v2_int(int r[2], const int a[2], const int b[2])
MINLINE void mul_v2_v2(float r[2], const float a[2])
MINLINE float normalize_v2_v2_length(float r[2], const float a[2], const float unit_length)
MINLINE double len_squared_v2v2_db(const double a[2], const double b[2])
MINLINE double len_v3_db(const double a[3])
MINLINE void abs_v2(float r[2])
MINLINE void add_newell_cross_v3_v3v3(float n[3], const float v_prev[3], const float v_curr[3])
MINLINE float len_manhattan_v3(const float v[3])
MINLINE bool is_one_v3(const float v[3])
MINLINE float dot_m3_v3_row_z(const float M[3][3], const float a[3])
MINLINE void sub_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void clamp_v3(float vec[3], const float min, const float max)
MINLINE bool compare_len_v3v3(const float v1[3], const float v2[3], const float limit)
MINLINE void copy_v4_v4_uchar(unsigned char r[4], const unsigned char a[4])
MINLINE void copy_v3_v3_char(char r[3], const char a[3])
MINLINE void mul_v3db_db(double r[3], double f)
MINLINE void mul_v2_fl(float r[2], float f)
MINLINE float len_v3(const float a[3])
MINLINE void copy_v3_v3_uchar(unsigned char r[3], const unsigned char a[3])
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE bool is_zero_v4_db(const double v[4])
MINLINE void mul_v3_fl(float r[3], float f)
MINLINE void copy_v2_v2_int(int r[2], const int a[2])
MINLINE void madd_v4_v4v4(float r[4], const float a[4], const float b[4])
MINLINE void add_v3_v3_db(double r[3], const double a[3])
MINLINE void normal_float_to_short_v3(short out[3], const float in[3])
MINLINE void mul_v3_v3db_db(double r[3], const double a[3], double f)
MINLINE float len_manhattan_v2(const float v[2])
MINLINE void copy_v4db_v4fl(double r[4], const float a[4])
MINLINE void negate_v2(float r[2])
MINLINE void mul_v4_v4fl(float r[4], const float a[4], float f)
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE float normalize_v2_length(float n[2], const float unit_length)
MINLINE void zero_v2_int(int r[2])
MINLINE float len_v2(const float v[2])
MINLINE float cross_v2v2(const float a[2], const float b[2])
MINLINE void negate_v3_v3(float r[3], const float a[3])
MINLINE float dot_v3v3(const float a[3], const float b[3])
MINLINE float len_manhattan_v3v3(const float a[3], const float b[3])
MINLINE void normal_short_to_float_v3(float out[3], const short in[3])
MINLINE void copy_v3_v3_int(int r[3], const int a[3])
MINLINE void copy_v2_v2_char(char r[2], const char a[2])
MINLINE void add_v2_v2(float r[2], const float a[2])
MINLINE void copy_v3_fl3(float v[3], float x, float y, float z)
MINLINE bool compare_v3v3_relative(const float v1[3], const float v2[3], const float limit, const int max_ulps)
MINLINE double dot_v2v2_db(const double a[2], const double b[2])
MINLINE void negate_v2_v2(float r[2], const float a[2])
MINLINE void normal_float_to_short_v4(short out[4], const float in[4])
MINLINE void add_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE bool equals_v2v2_int(const int v1[2], const int v2[2])
MINLINE void cross_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void clamp_v2(float vec[2], const float min, const float max)
MINLINE void copy_v4_v4_short(short r[4], const short a[4])
MINLINE void add_v2_fl(float r[2], float f)
MINLINE void zero_v3_int(int r[3])
MINLINE float len_squared_v2(const float v[2])
MINLINE bool compare_size_v3v3(const float v1[3], const float v2[3], const float limit)
MINLINE void abs_v3(float r[3])
MINLINE void madd_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void copy_v3_v3_short(short r[3], const short a[3])
MINLINE void copy_v2_uchar(unsigned char r[2], const unsigned char a)
MINLINE void negate_v4_v4(float r[4], const float a[4])
MINLINE double len_v2v2_db(const double v1[2], const double v2[2])
MINLINE float len_v3v3(const float a[3], const float b[3])
MINLINE void copy_v2_v2_short(short r[2], const short a[2])
MINLINE void negate_v3(float r[3])
MINLINE float dot_m4_v3_row_y(const float M[4][4], const float a[3])
MINLINE void sub_v2db_v2fl_v2fl(double r[2], const float a[2], const float b[2])
MINLINE bool equals_v3v3(const float v1[3], const float v2[3])
MINLINE bool equals_v2v2(const float v1[2], const float v2[2])
MINLINE bool equals_v4v4(const float v1[4], const float v2[4])
MINLINE void copy_v3fl_v3db(float r[3], const double a[3])
MINLINE float mul_project_m4_v3_zfac(const float mat[4][4], const float co[3])
MINLINE bool is_zero_v2_db(const double v[2])
MINLINE void clamp_v2_v2v2(float vec[2], const float min[2], const float max[2])
MINLINE void zero_v4(float r[4])
MINLINE void mul_v3_v3v3(float r[3], const float v1[3], const float v2[3])
MINLINE void copy_v3db_v3fl(double r[3], const float a[3])
MINLINE float len_squared_v4v4(const float a[4], const float b[4])
MINLINE void invert_v3(float r[3])
MINLINE void clamp_v4(float vec[4], const float min, const float max)
MINLINE double dot_v3v3_db(const double a[3], const double b[3])
MINLINE float normalize_v3_v3(float r[3], const float a[3])
MINLINE float len_squared_v2v2(const float a[2], const float b[2])
MINLINE double cross_v2v2_db(const double a[2], const double b[2])
MINLINE void add_v2_v2v2(float r[2], const float a[2], const float b[2])
MINLINE void negate_v3_short(short r[3])
MINLINE void copy_v2fl_v2db(float r[2], const double a[2])
MINLINE void sub_v2_v2v2(float r[2], const float a[2], const float b[2])
MINLINE void sub_v3_v3v3_int(int r[3], const int a[3], const int b[3])
MINLINE void zero_v2(float r[2])
MINLINE void copy_v4fl_v4db(float r[4], const double a[4])
MINLINE void cross_v3_v3v3_db(double r[3], const double a[3], const double b[3])
MINLINE float dot_m3_v3_row_y(const float M[3][3], const float a[3])
MINLINE bool compare_v2v2_relative(const float v1[2], const float v2[2], const float limit, const int max_ulps)
MINLINE bool compare_v2v2(const float v1[2], const float v2[2], const float limit)
MINLINE void copy_v4_v4_int(int r[4], const int a[4])
MINLINE float normalize_v2(float n[2])
MINLINE void abs_v4_v4(float r[4], const float a[4])
MINLINE double len_v2_db(const double v[2])
MINLINE bool compare_v4v4(const float v1[4], const float v2[4], const float limit)
MINLINE float normalize_v3_v3_length(float r[3], const float a[3], const float unit_length)
MINLINE void abs_v2_v2(float r[2], const float a[2])
MINLINE void swap_v3_v3(float a[3], float b[3])
MINLINE void copy_v3_fl(float r[3], float f)
MINLINE void abs_v3_v3(float r[3], const float a[3])
MINLINE void madd_v3_v3v3fl(float r[3], const float a[3], const float b[3], float f)
MINLINE void sub_v4_v4(float r[4], const float a[4])
MINLINE void madd_v4_v4fl(float r[4], const float a[4], float f)
MINLINE void copy_v3_v3_db(double r[3], const double a[3])
MINLINE float dot_v3v3v3(const float p[3], const float a[3], const float b[3])
MINLINE void zero_v3(float r[3])
MINLINE void clamp_v3_v3v3(float vec[3], const float min[3], const float max[3])
MINLINE float dot_m4_v3_row_x(const float M[4][4], const float a[3])
MINLINE float len_manhattan_v2v2(const float a[2], const float b[2])
MINLINE void copy_v4_v4_db(double r[4], const double a[4])
MINLINE void negate_v3_db(double r[3])
MINLINE void mul_v3_v3fl(float r[3], const float a[3], float f)
MINLINE void add_v4_fl(float r[4], float f)
MINLINE void star_m3_v3(float rmat[3][3], float a[3])
MINLINE void mul_v2_v2fl(float r[2], const float a[2], float f)
MINLINE bool compare_v4v4_relative(const float v1[4], const float v2[4], const float limit, const int max_ulps)
MINLINE void add_v2_v2_int(int r[2], const int a[2])
MINLINE float line_point_side_v2(const float l1[2], const float l2[2], const float pt[2])
MINLINE bool is_zero_v2(const float v[2])
MINLINE void add_v2_v2_db(double r[2], const double a[2])
MINLINE void add_v3_v3(float r[3], const float a[3])
MINLINE void invert_v2(float r[2])
MINLINE int len_manhattan_v2_int(const int v[2])
MINLINE void copy_v4_fl(float r[4], float f)
MINLINE float normalize_v2_v2(float r[2], const float a[2])
MINLINE float normalize_v3_length(float n[3], const float unit_length)
MINLINE double dot_v3db_v3fl(const double a[3], const float b[3])
MINLINE void copy_v2_v2_uchar(unsigned char r[2], const unsigned char a[2])
MINLINE void zero_v3_db(double r[3])
MINLINE float len_squared_v3(const float v[3])
MINLINE float normalize_v3(float n[3])
MINLINE void normal_float_to_short_v2(short out[2], const float in[2])
MINLINE bool is_zero_v3_db(const double v[3])
MINLINE void sub_v4_v4v4(float r[4], const float a[4], const float b[4])
MINLINE void negate_v4(float r[4])
MINLINE bool is_zero_v4(const float v[4])
MINLINE float len_v2v2(const float v1[2], const float v2[2])
MINLINE void sub_v3_v3v3_db(double r[3], const double a[3], const double b[3])
MINLINE void copy_v2_fl(float r[2], float f)
MINLINE void sub_v2_v2v2_db(double r[2], const double a[2], const double b[2])
#define M
static unsigned c
Definition: RandGen.cpp:97
static unsigned a[3]
Definition: RandGen.cpp:92
#define min(a, b)
Definition: sort.c:51
float max
__forceinline const avxi abs(const avxi &a)
Definition: util_avxi.h:186