Use macro for setting vectors

This commit is contained in:
2025-06-22 20:32:46 +03:00
parent 77470adbcd
commit 7bfbcd0de5
5 changed files with 59 additions and 48 deletions

View File

@@ -6,6 +6,7 @@
#define EPSILON 0.00001f
#define PI 3.14159265358979323846f
#define SET_ROW(row, val) row[0] = row[1] = row[2] = val
void BH_Mat3fIdentity(float out[9])
@@ -47,17 +48,17 @@ void BH_Mat3fMul(const float a[9],
{
float tmp[9], row[3];
row[0] = row[1] = row[2] = b[0]; BH_Vec3fMul(&a[0], row, &tmp[0]);
row[0] = row[1] = row[2] = b[1]; BH_Vec3fMulAdd(&a[3], row, &tmp[0], &tmp[0]);
row[0] = row[1] = row[2] = b[2]; BH_Vec3fMulAdd(&a[6], row, &tmp[0], &tmp[0]);
SET_ROW(row, b[0]); BH_Vec3fMul(&a[0], row, &tmp[0]);
SET_ROW(row, b[1]); BH_Vec3fMulAdd(&a[3], row, &tmp[0], &tmp[0]);
SET_ROW(row, b[2]); BH_Vec3fMulAdd(&a[6], row, &tmp[0], &tmp[0]);
row[0] = row[1] = row[2] = b[3]; BH_Vec3fMul(&a[0], row, &tmp[3]);
row[0] = row[1] = row[2] = b[4]; BH_Vec3fMulAdd(&a[3], row, &tmp[3], &tmp[3]);
row[0] = row[1] = row[2] = b[5]; BH_Vec3fMulAdd(&a[6], row, &tmp[3], &tmp[3]);
SET_ROW(row, b[3]); BH_Vec3fMul(&a[0], row, &tmp[3]);
SET_ROW(row, b[4]); BH_Vec3fMulAdd(&a[3], row, &tmp[3], &tmp[3]);
SET_ROW(row, b[5]); BH_Vec3fMulAdd(&a[6], row, &tmp[3], &tmp[3]);
row[0] = row[1] = row[2] = b[6]; BH_Vec3fMul(&a[0], row, &tmp[6]);
row[0] = row[1] = row[2] = b[7]; BH_Vec3fMulAdd(&a[3], row, &tmp[6], &tmp[6]);
row[0] = row[1] = row[2] = b[8]; BH_Vec3fMulAdd(&a[6], row, &tmp[6], &tmp[6]);
SET_ROW(row, b[6]); BH_Vec3fMul(&a[0], row, &tmp[6]);
SET_ROW(row, b[7]); BH_Vec3fMulAdd(&a[3], row, &tmp[6], &tmp[6]);
SET_ROW(row, b[8]); BH_Vec3fMulAdd(&a[6], row, &tmp[6], &tmp[6]);
memcpy(out, tmp, sizeof(tmp));
}
@@ -194,9 +195,9 @@ void BH_Mat3fApplyVec3f(float a[9],
{
float tmp[3], row[3];
row[0] = row[1] = row[2] = b[0]; BH_Vec3fMul(&a[0], row, tmp);
row[0] = row[1] = row[2] = b[1]; BH_Vec3fMulAdd(&a[3], row, tmp, tmp);
row[0] = row[1] = row[2] = b[2]; BH_Vec3fMulAdd(&a[6], row, tmp, tmp);
SET_ROW(row, b[0]); BH_Vec3fMul(&a[0], row, tmp);
SET_ROW(row, b[1]); BH_Vec3fMulAdd(&a[3], row, tmp, tmp);
SET_ROW(row, b[2]); BH_Vec3fMulAdd(&a[6], row, tmp, tmp);
memcpy(out, tmp, sizeof(tmp));
}
@@ -208,9 +209,9 @@ void BH_Mat3fApplyVec2f(float a[9],
{
float tmp[3], row[3];
row[0] = row[1] = row[2] = b[0]; BH_Vec3fMul(&a[0], row, tmp);
row[0] = row[1] = row[2] = b[1]; BH_Vec3fMulAdd(&a[3], row, tmp, tmp);
row[0] = row[1] = row[2] = 1.0f; BH_Vec3fMulAdd(&a[6], row, tmp, tmp);
SET_ROW(row, b[0]); BH_Vec3fMul(&a[0], row, tmp);
SET_ROW(row, b[1]); BH_Vec3fMulAdd(&a[3], row, tmp, tmp);
SET_ROW(row, 1.0f); BH_Vec3fMulAdd(&a[6], row, tmp, tmp);
memcpy(out, tmp, sizeof(float) * 2);
}

View File

@@ -8,6 +8,7 @@
#define EPSILON 0.00001f
#define PI 3.14159265358979323846f
#define SET_ROW(row, val) row[0] = row[1] = row[2] = row[3] = val
void BH_Mat4fIdentity(float out[16])
@@ -52,25 +53,25 @@ void BH_Mat4fMul(const float a[16],
{
float tmp[16], row[4];
row[0] = row[1] = row[2] = row[3] = b[0]; BH_Vec4fMul(&a[0], row, &tmp[0]);
row[0] = row[1] = row[2] = row[3] = b[1]; BH_Vec4fMulAdd(&a[4], row, &tmp[0], &tmp[0]);
row[0] = row[1] = row[2] = row[3] = b[2]; BH_Vec4fMulAdd(&a[8], row, &tmp[0], &tmp[0]);
row[0] = row[1] = row[2] = row[3] = b[3]; BH_Vec4fMulAdd(&a[12], row, &tmp[0], &tmp[0]);
SET_ROW(row, b[0]); BH_Vec4fMul(&a[0], row, &tmp[0]);
SET_ROW(row, b[1]); BH_Vec4fMulAdd(&a[4], row, &tmp[0], &tmp[0]);
SET_ROW(row, b[2]); BH_Vec4fMulAdd(&a[8], row, &tmp[0], &tmp[0]);
SET_ROW(row, b[3]); BH_Vec4fMulAdd(&a[12], row, &tmp[0], &tmp[0]);
row[0] = row[1] = row[2] = row[3] = b[4]; BH_Vec4fMul(&a[0], row, &tmp[4]);
row[0] = row[1] = row[2] = row[3] = b[5]; BH_Vec4fMulAdd(&a[4], row, &tmp[4], &tmp[4]);
row[0] = row[1] = row[2] = row[3] = b[6]; BH_Vec4fMulAdd(&a[8], row, &tmp[4], &tmp[4]);
row[0] = row[1] = row[2] = row[3] = b[7]; BH_Vec4fMulAdd(&a[12], row, &tmp[4], &tmp[4]);
SET_ROW(row, b[4]); BH_Vec4fMul(&a[0], row, &tmp[4]);
SET_ROW(row, b[5]); BH_Vec4fMulAdd(&a[4], row, &tmp[4], &tmp[4]);
SET_ROW(row, b[6]); BH_Vec4fMulAdd(&a[8], row, &tmp[4], &tmp[4]);
SET_ROW(row, b[7]); BH_Vec4fMulAdd(&a[12], row, &tmp[4], &tmp[4]);
row[0] = row[1] = row[2] = row[3] = b[8]; BH_Vec4fMul(&a[0], row, &tmp[8]);
row[0] = row[1] = row[2] = row[3] = b[9]; BH_Vec4fMulAdd(&a[4], row, &tmp[8], &tmp[8]);
row[0] = row[1] = row[2] = row[3] = b[10]; BH_Vec4fMulAdd(&a[8], row, &tmp[8], &tmp[8]);
row[0] = row[1] = row[2] = row[3] = b[11]; BH_Vec4fMulAdd(&a[12], row, &tmp[8], &tmp[8]);
SET_ROW(row, b[8]); BH_Vec4fMul(&a[0], row, &tmp[8]);
SET_ROW(row, b[9]); BH_Vec4fMulAdd(&a[4], row, &tmp[8], &tmp[8]);
SET_ROW(row, b[10]); BH_Vec4fMulAdd(&a[8], row, &tmp[8], &tmp[8]);
SET_ROW(row, b[11]); BH_Vec4fMulAdd(&a[12], row, &tmp[8], &tmp[8]);
row[0] = row[1] = row[2] = row[3] = b[12]; BH_Vec4fMul(&a[0], row, &tmp[12]);
row[0] = row[1] = row[2] = row[3] = b[13]; BH_Vec4fMulAdd(&a[4], row, &tmp[12], &tmp[12]);
row[0] = row[1] = row[2] = row[3] = b[14]; BH_Vec4fMulAdd(&a[8], row, &tmp[12], &tmp[12]);
row[0] = row[1] = row[2] = row[3] = b[15]; BH_Vec4fMulAdd(&a[12], row, &tmp[12], &tmp[12]);
SET_ROW(row, b[12]); BH_Vec4fMul(&a[0], row, &tmp[12]);
SET_ROW(row, b[13]); BH_Vec4fMulAdd(&a[4], row, &tmp[12], &tmp[12]);
SET_ROW(row, b[14]); BH_Vec4fMulAdd(&a[8], row, &tmp[12], &tmp[12]);
SET_ROW(row, b[15]); BH_Vec4fMulAdd(&a[12], row, &tmp[12], &tmp[12]);
memcpy(out, tmp, sizeof(tmp));
}
@@ -425,10 +426,10 @@ void BH_Mat4fApplyVec4f(const float a[16],
{
float tmp[4], row[4];
row[0] = row[1] = row[2] = row[3] = b[0]; BH_Vec4fMul(&a[0], row, tmp);
row[0] = row[1] = row[2] = row[3] = b[1]; BH_Vec4fMulAdd(&a[4], row, tmp, tmp);
row[0] = row[1] = row[2] = row[3] = b[2]; BH_Vec4fMulAdd(&a[8], row, tmp, tmp);
row[0] = row[1] = row[2] = row[3] = b[3]; BH_Vec4fMulAdd(&a[12], row, tmp, tmp);
SET_ROW(row, b[0]); BH_Vec4fMul(&a[0], row, tmp);
SET_ROW(row, b[1]); BH_Vec4fMulAdd(&a[4], row, tmp, tmp);
SET_ROW(row, b[2]); BH_Vec4fMulAdd(&a[8], row, tmp, tmp);
SET_ROW(row, b[3]); BH_Vec4fMulAdd(&a[12], row, tmp, tmp);
memcpy(out, tmp, sizeof(tmp));
}
@@ -440,10 +441,10 @@ void BH_Mat4fApplyVec3f(const float a[16],
{
float tmp[4], row[4];
row[0] = row[1] = row[2] = row[3] = b[0]; BH_Vec4fMul(&a[0], row, tmp);
row[0] = row[1] = row[2] = row[3] = b[1]; BH_Vec4fMulAdd(&a[4], row, tmp, tmp);
row[0] = row[1] = row[2] = row[3] = b[2]; BH_Vec4fMulAdd(&a[8], row, tmp, tmp);
row[0] = row[1] = row[2] = row[3] = 1.0f; BH_Vec4fMulAdd(&a[12], row, tmp, tmp);
SET_ROW(row, b[0]); BH_Vec4fMul(&a[0], row, tmp);
SET_ROW(row, b[1]); BH_Vec4fMulAdd(&a[4], row, tmp, tmp);
SET_ROW(row, b[2]); BH_Vec4fMulAdd(&a[8], row, tmp, tmp);
SET_ROW(row, 1.0f); BH_Vec4fMulAdd(&a[12], row, tmp, tmp);
memcpy(out, tmp, sizeof(float) * 3);
}

View File

@@ -2,6 +2,9 @@
#include <math.h>
#define SET_ROW(row, val) row[0] = row[1] = val
void BH_Vec2fAdd(const float a[2],
const float b[2],
float out[2])
@@ -147,7 +150,7 @@ void BH_Vec2fBarycentric(const float a[2],
float u;
u = 1.0f - v - w;
tmp1[0] = tmp1[1] = u; BH_Vec2fMul(a, tmp1, tmp2);
tmp1[0] = tmp1[1] = v; BH_Vec2fMulAdd(b, tmp1, tmp2, tmp2);
tmp1[0] = tmp1[1] = w; BH_Vec2fMulAdd(c, tmp1, tmp2, out);
SET_ROW(tmp1, u); BH_Vec2fMul(a, tmp1, tmp2);
SET_ROW(tmp1, v); BH_Vec2fMulAdd(b, tmp1, tmp2, tmp2);
SET_ROW(tmp1, w); BH_Vec2fMulAdd(c, tmp1, tmp2, out);
}

View File

@@ -3,6 +3,9 @@
#include <math.h>
#define SET_ROW(row, val) row[0] = row[1] = row[2] = val
void BH_Vec3fAdd(const float a[3],
const float b[3],
float out[3])
@@ -162,7 +165,7 @@ void BH_Vec3fBarycentric(const float a[3],
float u;
u = 1.0f - v - w;
tmp1[0] = tmp1[1] = tmp1[2] = u; BH_Vec3fMul(a, tmp1, tmp2);
tmp1[0] = tmp1[1] = tmp1[2] = v; BH_Vec3fMulAdd(b, tmp1, tmp2, tmp2);
tmp1[0] = tmp1[1] = tmp1[2] = w; BH_Vec3fMulAdd(c, tmp1, tmp2, out);
SET_ROW(tmp1, u); BH_Vec3fMul(a, tmp1, tmp2);
SET_ROW(tmp1, v); BH_Vec3fMulAdd(b, tmp1, tmp2, tmp2);
SET_ROW(tmp1, w); BH_Vec3fMulAdd(c, tmp1, tmp2, out);
}

View File

@@ -2,6 +2,9 @@
#include <math.h>
#define SET_ROW(row, val) row[0] = row[1] = row[2] = row[3] = val
void BH_Vec4fAdd(const float a[4],
const float b[4],
float out[4])
@@ -156,7 +159,7 @@ void BH_Vec4fBarycentric(const float a[4],
float u;
u = 1.0f - v - w;
tmp1[0] = tmp1[1] = tmp1[2] = tmp1[3] = u; BH_Vec4fMul(a, tmp1, tmp2);
tmp1[0] = tmp1[1] = tmp1[2] = tmp1[3] = v; BH_Vec4fMulAdd(b, tmp1, tmp2, tmp2);
tmp1[0] = tmp1[1] = tmp1[2] = tmp1[3] = w; BH_Vec4fMulAdd(c, tmp1, tmp2, out);
SET_ROW(tmp1, u); BH_Vec4fMul(a, tmp1, tmp2);
SET_ROW(tmp1, v); BH_Vec4fMulAdd(b, tmp1, tmp2, tmp2);
SET_ROW(tmp1, w); BH_Vec4fMulAdd(c, tmp1, tmp2, out);
}