annotate dmvecmat.h @ 239:07c4f1a7ddc6

Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some functions to dmvecmat.h as static inline for speed, etc.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 09 Oct 2012 12:59:09 +0300
parents 32250b436bca
children 00785510b743
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1 /*
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2 * DMLib
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
3 * -- Vector and matrix functions
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
4 * Programmed and designed by Matti 'ccr' Hamalainen
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
5 * (C) Copyright 2011 Tecnic Software productions (TNSP)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
6 */
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
7 #ifndef DMVECMAT_H
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
8 #define DMVECMAT_H
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
9 #include "dmlib.h"
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
10
239
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
11 #include <math.h>
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
12
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
13 #ifdef __cplusplus
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
14 extern "C" {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
15 #endif
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
16
239
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
17 #define DM_MATRIX_SIZE (4)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
18
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
19 typedef struct
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
20 {
239
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
21 DMFloat x, y, z, W;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
22 } DMVector;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
23
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
24 typedef struct
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
25 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
26 DMFloat m[DM_MATRIX_SIZE][DM_MATRIX_SIZE];
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
27 } DMMatrix;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
28
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
29 void dm_vector_mul_by_mat_n(DMVector *list, const int nlist, const DMMatrix *mat);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
30
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
31 void dm_matrix_unit(DMMatrix *mat);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
32 void dm_matrix_transpose(DMMatrix *mat1, const DMMatrix *mat2);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
33
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
34 void dm_matrix_mul(DMMatrix *mat1, const DMMatrix *mat2);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
35 void dm_matrix_mul_n(DMMatrix *list, const int nlist, const DMMatrix *mat);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
36
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
37 void dm_matrix_rot(DMMatrix *mat,
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
38 const DMFloat sx, const DMFloat sy, const DMFloat sz,
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
39 const DMFloat cx, const DMFloat cy, const DMFloat cz);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
40
239
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
41
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
42 static inline void dm_vector_copy(DMVector *vd, DMVector *vs)
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
43 {
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
44 memcpy(vd, vs, sizeof(DMVector));
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
45 }
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
46
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
47
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
48 /* Basic vector operations
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
49 */
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
50 static inline void dm_vector_add(DMVector *vr, const DMVector *v2)
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
51 {
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
52 #ifdef DM_USE_SIMD
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
53 asm("movups %2, %%xmm1\n"
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
54 "movups %1, %%xmm2\n"
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
55 "addps %%xmm2, %%xmm1\n"
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
56 "movups %%xmm1, %0\n"
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
57 : "=m" (*vr)
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
58 : "m" (*vr), "m" (*v2)
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
59 : "memory", "%xmm1", "%xmm2");
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
60 #else
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
61 vr->x += v2->x;
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
62 vr->y += v2->y;
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
63 vr->z += v2->z;
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
64 #endif
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
65 }
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
66
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
67
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
68 static inline void dm_vector_add_r(DMVector *vr, const DMVector *v1, const DMVector *v2)
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
69 {
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
70 #ifdef DM_USE_SIMD
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
71 asm("movups %2, %%xmm1\n"
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
72 "movups %1, %%xmm2\n"
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
73 "addps %%xmm2, %%xmm1\n"
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
74 "movups %%xmm1, %0\n"
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
75 : "=m" (*vr)
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
76 : "m" (*v1), "m" (*v2)
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
77 : "memory", "%xmm1", "%xmm2");
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
78 #else
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
79 vr->x = v1->x + v2->x;
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
80 vr->y = v1->y + v2->y;
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
81 vr->z = v1->z + v2->z;
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
82 #endif
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
83 }
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
84
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
85
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
86 static inline void dm_vector_sub(DMVector *vr, const DMVector *v2)
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
87 {
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
88 #ifdef DM_USE_SIMD
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
89 asm("movups %2, %%xmm1\n"
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
90 "movups %1, %%xmm2\n"
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
91 "subps %%xmm2, %%xmm1\n"
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
92 "movups %%xmm1, %0\n"
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
93 : "=m" (*vr)
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
94 : "m" (*vr), "m" (*v2)
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
95 : "memory", "%xmm1", "%xmm2");
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
96 #else
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
97 vr->x -= v2->x;
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
98 vr->y -= v2->y;
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
99 vr->z -= v2->z;
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
100 #endif
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
101 }
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
102
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
103
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
104 static inline void dm_vector_sub_r(DMVector *vr, const DMVector *v1, const DMVector *v2)
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
105 {
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
106 #ifdef DM_USE_SIMD
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
107 asm("movups %2, %%xmm1\n"
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
108 "movups %1, %%xmm2\n"
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
109 "subps %%xmm2, %%xmm1\n"
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
110 "movups %%xmm1, %0\n"
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
111 : "=m" (*vr)
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
112 : "m" (*v1), "m" (*v2)
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
113 : "memory", "%xmm1", "%xmm2");
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
114 #else
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
115 vr->x = v1->x - v2->x;
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
116 vr->y = v1->y - v2->y;
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
117 vr->z = v1->z - v2->z;
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
118 #endif
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
119 }
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
120
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
121
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
122 /* Returns dot-product of two given vectors
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
123 */
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
124 static inline DMFloat dm_vector_dot(const DMVector *v1, const DMVector *v2)
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
125 {
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
126 return (v1->x * v2->x) + (v1->y * v2->y) + (v1->z * v2->z);
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
127 }
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
128
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
129
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
130 /* Return vector length
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
131 */
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
132 static inline DMFloat dm_vector_length(const DMVector *vs)
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
133 {
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
134 return sqrt((vs->x * vs->x) + (vs->y * vs->y) + (vs->z * vs->z));
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
135 }
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
136
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
137
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
138 /* Normalize vector
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
139 */
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
140 static inline void dm_vector_normalize(DMVector *vec)
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
141 {
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
142 DMFloat l = dm_vector_length(vec);
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
143
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
144 if (l > 0.0f)
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
145 {
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
146 l = 1.0f / l;
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
147 vec->x *= l;
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
148 vec->y *= l;
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
149 vec->z *= l;
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
150 }
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
151 }
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
152
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
153
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
154 /* Scale given vector
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
155 */
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
156 static inline void dm_vector_scale(DMVector * vec, const DMFloat k)
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
157 {
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
158 vec->x *= k;
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
159 vec->y *= k;
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
160 vec->z *= k;
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
161 }
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
162
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
163
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
164 /* Returns cross-product of two given vectors
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
165 */
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
166 static inline void dm_vector_cross(DMVector *vr, const DMVector *v1, const DMVector *v2)
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
167 {
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
168 vr->x = (v1->y * v2->z) - (v1->z * v2->y);
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
169 vr->y = (v1->z * v2->x) - (v1->x * v2->z);
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
170 vr->z = (v1->x * v2->y) - (v1->y * v2->x);
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
171 }
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
172
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
173
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
174 /* Multiply given vector with a matrix
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
175 */
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
176 static inline void dm_vector_mul_by_mat(DMVector *vd, const DMVector *vs, const DMMatrix *mat)
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
177 {
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
178 vd->x = (vs->x * mat->m[0][0]) + (vs->y * mat->m[1][0]) + (vs->z * mat->m[2][0]);
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
179 vd->y = (vs->x * mat->m[0][1]) + (vs->y * mat->m[1][1]) + (vs->z * mat->m[2][1]);
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
180 vd->z = (vs->x * mat->m[0][2]) + (vs->y * mat->m[1][2]) + (vs->z * mat->m[2][2]);
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
181 }
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
182
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
183
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
184 /* Make rotation matrix from given angles (radians)
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
185 */
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
186 static inline void dm_matrix_rot_a(DMMatrix *mat, const DMFloat ax, const DMFloat ay, const DMFloat az)
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
187 {
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
188 dm_matrix_rot(mat, sin(ax), sin(ay), sin(az), cos(ax), cos(ay), cos(az));
07c4f1a7ddc6 Make DMVector 16 bytes in size (4 floats), add SSE optimizations, move some
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
189 }
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
190
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
191
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
192 #ifdef __cplusplus
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
193 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
194 #endif
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
195 #endif // DMVECMAT_H