From 7bfbcd0de587b298dd1421e80edf549fbb00dd16 Mon Sep 17 00:00:00 2001 From: Mikhail Romanko Date: Sun, 22 Jun 2025 20:32:46 +0300 Subject: Use macro for setting vectors --- src/Math/Mat3f.c | 31 ++++++++++++++++--------------- src/Math/Mat4f.c | 49 +++++++++++++++++++++++++------------------------ src/Math/Vec2f.c | 9 ++++++--- src/Math/Vec3f.c | 9 ++++++--- src/Math/Vec4f.c | 9 ++++++--- 5 files changed, 59 insertions(+), 48 deletions(-) diff --git a/src/Math/Mat3f.c b/src/Math/Mat3f.c index 33cdecf..33cda05 100644 --- a/src/Math/Mat3f.c +++ b/src/Math/Mat3f.c @@ -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); } diff --git a/src/Math/Mat4f.c b/src/Math/Mat4f.c index 719a2e5..d776010 100644 --- a/src/Math/Mat4f.c +++ b/src/Math/Mat4f.c @@ -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); } diff --git a/src/Math/Vec2f.c b/src/Math/Vec2f.c index 58e9a4e..f9ea36f 100644 --- a/src/Math/Vec2f.c +++ b/src/Math/Vec2f.c @@ -2,6 +2,9 @@ #include +#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); } diff --git a/src/Math/Vec3f.c b/src/Math/Vec3f.c index d061ce8..648273a 100644 --- a/src/Math/Vec3f.c +++ b/src/Math/Vec3f.c @@ -3,6 +3,9 @@ #include +#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); } diff --git a/src/Math/Vec4f.c b/src/Math/Vec4f.c index 27fd55d..76d461e 100644 --- a/src/Math/Vec4f.c +++ b/src/Math/Vec4f.c @@ -2,6 +2,9 @@ #include +#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); } -- cgit v1.2.3