optimization: improved matrix vec3 mult

This commit is contained in:
2026-04-19 20:48:04 +02:00
parent cf52d23ab8
commit 4163dd6f4e

View File

@@ -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;