optimization: improved matrix vec3 mult
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
#define REPEAT_2(FN) REPEAT_1(FN) FN(1)
|
||||
#define REPEAT_3(FN) REPEAT_2(FN) FN(2)
|
||||
#define REPEAT_4(FN) REPEAT_3(FN) FN(3)
|
||||
#define REPEAT_4N(FN) REPEAT_3(FN) FN(3)
|
||||
|
||||
#define add(i) r[i] = a[i] + b[i];
|
||||
#define set(i) r[i] = v;
|
||||
@@ -130,11 +131,7 @@ LINMATH_H_FUNC void vec4_reflect(vec4 r, vec4 const v, vec4 const n) {
|
||||
|
||||
typedef vec4 mat4x4[4];
|
||||
|
||||
LINMATH_H_FUNC void mat4x4_getPos(vec3 r, mat4x4 const M) {
|
||||
r[0] = M[3][0];
|
||||
r[1] = M[3][1];
|
||||
r[2] = M[3][2];
|
||||
}
|
||||
LINMATH_H_FUNC float *mat4x4_getPos(mat4x4 M) { return M[3]; }
|
||||
|
||||
LINMATH_H_FUNC void mat4x4_identity(mat4x4 M) {
|
||||
int i, j;
|
||||
@@ -198,14 +195,36 @@ LINMATH_H_FUNC void mat4x4_mul(mat4x4 M, mat4x4 const a, mat4x4 const b) {
|
||||
}
|
||||
mat4x4_dup(M, temp);
|
||||
}
|
||||
|
||||
LINMATH_H_FUNC void mat4x4_mul_vec4(vec4 r, mat4x4 const M, vec4 const v) {
|
||||
int i, j;
|
||||
for (j = 0; j < 4; ++j) {
|
||||
r[j] = 0.f;
|
||||
for (i = 0; i < 4; ++i)
|
||||
r[j] += M[i][j] * v[i];
|
||||
}
|
||||
r[0] = M[0][0] * v[0];
|
||||
r[0] += M[1][0] * v[1];
|
||||
r[0] += M[2][0] * v[2];
|
||||
r[0] += M[3][0] * v[3];
|
||||
|
||||
r[1] = M[0][1] * v[0];
|
||||
r[1] += M[1][1] * v[1];
|
||||
r[1] += M[2][1] * v[2];
|
||||
r[1] += M[3][1] * v[3];
|
||||
|
||||
r[2] = M[0][2] * v[0];
|
||||
r[2] += M[1][2] * v[1];
|
||||
r[2] += M[2][2] * v[2];
|
||||
r[2] += M[3][2] * v[3];
|
||||
|
||||
r[3] = M[0][3] * v[0];
|
||||
r[3] += M[1][3] * v[1];
|
||||
r[3] += M[2][3] * v[2];
|
||||
r[3] += M[3][3] * v[3];
|
||||
}
|
||||
// LINMATH_H_FUNC void mat4x4_mul_vec4(vec4 r, mat4x4 const M, vec4 const v) {
|
||||
// int i, j;
|
||||
// for (j = 0; j < 4; ++j) {
|
||||
// r[j] = 0.f;
|
||||
// for (i = 0; i < 4; ++i)
|
||||
// r[j] += M[i][j] * v[i];
|
||||
// }
|
||||
// }
|
||||
LINMATH_H_FUNC void mat4x4_translate(mat4x4 T, float x, float y, float z) {
|
||||
mat4x4_identity(T);
|
||||
T[3][0] = x;
|
||||
|
||||
Reference in New Issue
Block a user