#include "matrix34.h"
#include "harness/trace.h"
#include "vector.h"
#include <math.h>
br_matrix34 mattmp1;
br_matrix34 mattmp2;
#define M(x, y) mat->m[x][y]
#define A(x, y) A->m[x][y]
#define B(x, y) B->m[x][y]
#define C(x, y) C->m[x][y]
#define BR_MAC3(a, b, c, d, e, f) ((a) * (b) + (c) * (d) + (e) * (f))
#define BR_MAC4(a, b, c, d, e, f, g, h) ((a) * (b) + (c) * (d) + (e) * (f) + (g) * (h))
// IDA: void __cdecl BrMatrix34Copy(br_matrix34 *A, br_matrix34 *B)
void BrMatrix34Copy(br_matrix34* A, br_matrix34* B) {
LOG_TRACE("(%p, %p)", A, B);
A(0, 0) = B(0, 0);
A(0, 1) = B(0, 1);
A(0, 2) = B(0, 2);
A(1, 0) = B(1, 0);
A(1, 1) = B(1, 1);
A(1, 2) = B(1, 2);
A(2, 0) = B(2, 0);
A(2, 1) = B(2, 1);
A(2, 2) = B(2, 2);
A(3, 0) = B(3, 0);
A(3, 1) = B(3, 1);
A(3, 2) = B(3, 2);
}
// IDA: void __cdecl BrMatrix34Mul(br_matrix34 *A, br_matrix34 *B, br_matrix34 *C)
void BrMatrix34Mul(br_matrix34* A, br_matrix34* B, br_matrix34* C) {
LOG_TRACE("(%p, %p, %p)", A, B, C);
A(0, 0) = BR_MAC3(B(0, 0), C(0, 0), B(0, 1), C(1, 0), B(0, 2), C(2, 0));
A(0, 1) = BR_MAC3(B(0, 0), C(0, 1), B(0, 1), C(1, 1), B(0, 2), C(2, 1));
A(0, 2) = BR_MAC3(B(0, 0), C(0, 2), B(0, 1), C(1, 2), B(0, 2), C(2, 2));
A(1, 0) = BR_MAC3(B(1, 0), C(0, 0), B(1, 1), C(1, 0), B(1, 2), C(2, 0));
A(1, 1) = BR_MAC3(B(1, 0), C(0, 1), B(1, 1), C(1, 1), B(1, 2), C(2, 1));
A(1, 2) = BR_MAC3(B(1, 0), C(0, 2), B(1, 1), C(1, 2), B(1, 2), C(2, 2));
A(2, 0) = BR_MAC3(B(2, 0), C(0, 0), B(2, 1), C(1, 0), B(2, 2), C(2, 0));
A(2, 1) = BR_MAC3(B(2, 0), C(0, 1), B(2, 1), C(1, 1), B(2, 2), C(2, 1));
A(2, 2) = BR_MAC3(B(2, 0), C(0, 2), B(2, 1), C(1, 2), B(2, 2), C(2, 2));
A(3, 0) = BR_MAC3(B(3, 0), C(0, 0), B(3, 1), C(1, 0), B(3, 2), C(2, 0)) + C(3, 0);
A(3, 1) = BR_MAC3(B(3, 0), C(0, 1), B(3, 1), C(1, 1), B(3, 2), C(2, 1)) + C(3, 1);
A(3, 2) = BR_MAC3(B(3, 0), C(0, 2), B(3, 1), C(1, 2), B(3, 2), C(2, 2)) + C(3, 2);
}
// IDA: void __cdecl BrMatrix34Identity(br_matrix34 *mat)
void BrMatrix34Identity(br_matrix34* mat) {
// { 1, 0, 0},
// { 0, 1, 0},
// { 0, 0, 1}
// ( 0, 0, 0 }
M(0, 0) = 1.f;
M(0, 1) = 0.f;
M(0, 2) = 0.f;
M(1, 0) = 0.f;
M(1, 1) = 1.f;
M(1, 2) = 0.f;
M(2, 0) = 0.f;
M(2, 1) = 0.f;
M(2, 2) = 1.f;
M(3, 0) = 0.f;
M(3, 1) = 0.f;
M(3, 2) = 0.f;
}
// IDA: void __cdecl BrMatrix34RotateX(br_matrix34 *mat, br_angle rx)
void BrMatrix34RotateX(br_matrix34* mat, br_angle rx) {
br_scalar s;
br_scalar c;
LOG_TRACE("(%p, %d)", mat, rx);
s = BR_SIN(rx);
c = BR_COS(rx);
M(0, 0) = 1;
M(0, 1) = 0;
M(0, 2) = 0;
M(1, 0) = 0;
M(1, 1) = c;
M(1, 2) = s;
M(2, 0) = 0;
M(2, 1) = -s;
M(2, 2) = c;
M(3, 0) = 0;
M(3, 1) = 0;
M(3, 2) = 0;
}
// IDA: void __cdecl BrMatrix34RotateY(br_matrix34 *mat, br_angle ry)
void BrMatrix34RotateY(br_matrix34* mat, br_angle ry) {
br_scalar s;
br_scalar c;
LOG_TRACE("(%p, %d)", mat, ry);
s = BR_SIN(ry);
c = BR_COS(ry);
M(0, 0) = c;
M(0, 1) = 0;
M(0, 2) = -s;
M(1, 0) = 0;
M(1, 1) = 1;
M(1, 2) = 0;
M(2, 0) = s;
M(2, 1) = 0;
M(2, 2) = c;
M(3, 0) = 0;
M(3, 1) = 0;
M(3, 2) = 0;
}
// IDA: void __cdecl BrMatrix34RotateZ(br_matrix34 *mat, br_angle rz)
void BrMatrix34RotateZ(br_matrix34* mat, br_angle rz) {
br_scalar s;
br_scalar c;
LOG_TRACE("(%p, %d)", mat, rz);
s = BR_SIN(rz);
c = BR_COS(rz);
M(0, 0) = c;
M(0, 1) = s;
M(0, 2) = 0;
M(1, 0) = -s;
M(1, 1) = c;
M(1, 2) = 0;
M(2, 0) = 0;
M(2, 1) = 0;
M(2, 2) = 1;
M(3, 0) = 0;
M(3, 1) = 0;
M(3, 2) = 0;
}
// IDA: void __cdecl BrMatrix34Rotate(br_matrix34 *mat, br_angle r, br_vector3 *a)
void BrMatrix34Rotate(br_matrix34* mat, br_angle r, br_vector3* a) {
br_scalar t;
br_scalar s;
br_scalar c;
br_scalar txy;
br_scalar txz;
br_scalar tyz;
br_scalar sx;
br_scalar sy;
br_scalar sz;
LOG_TRACE("(%p, %d, %p)", mat, r, a);
s = BR_SIN(r);
c = BR_COS(r);
t = (br_scalar) 1.0 - c; // Pierre-Marie Baty -- added type cast
txy = t * a->v[0];
txz = txy * a->v[2];
txy = txy * a->v[1];
tyz = t * a->v[1] * a->v[2];
sx = s * a->v[0];
sy = s * a->v[1];
sz = s * a->v[2];
M(0, 0) = t * a->v[0] * a->v[0] + c;
M(0, 1) = txy + sz;
M(0, 2) = txz - sy;
M(1, 0) = txy - sz;
M(1, 1) = t * a->v[1] * a->v[1] + c;
M(1, 2) = tyz + sx;
M(2, 0) = txz + sy;
M(2, 1) = tyz - sx;
M(2, 2) = t * a->v[2] * a->v[2] + c;
M(3, 0) = M(3, 1) = M(3, 2) = 0.0;
}
// IDA: void __cdecl BrMatrix34Translate(br_matrix34 *mat, br_scalar dx, br_scalar dy, br_scalar dz)
void BrMatrix34Translate(br_matrix34* mat, br_scalar dx, br_scalar dy, br_scalar dz) {
LOG_TRACE("(%p, %f, %f, %f)", mat, dx, dy, dz);
M(0, 0) = 1.f;
M(0, 1) = 0.f;
M(0, 2) = 0.f;
M(1, 0) = 0.f;
M(1, 1) = 1.f;
M(1, 2) = 0.f;
M(2, 0) = 0.f;
M(2, 1) = 0.f;
M(2, 2) = 1.f;
M(3, 0) = dx;
M(3, 1) = dy;
M(3, 2) = dz;
}
// IDA: void __cdecl BrMatrix34Scale(br_matrix34 *mat, br_scalar sx, br_scalar sy, br_scalar sz)
void BrMatrix34Scale(br_matrix34* mat, br_scalar sx, br_scalar sy, br_scalar sz) {
LOG_TRACE("(%p, %f, %f, %f)", mat, sx, sy, sz);
M(0, 0) = sx;
M(0, 1) = 0.f;
M(0, 2) = 0.f;
M(1, 0) = 0.f;
M(1, 1) = sy;
M(1, 2) = 0.f;
M(2, 0) = 0.f;
M(2, 1) = 0.f;
M(2, 2) = sz;
M(3, 0) = 0.f;
M(3, 1) = 0.f;
M(3, 2) = 0.f;
}
// IDA: void __cdecl BrMatrix34ShearX(br_matrix34 *mat, br_scalar sy, br_scalar sz)
void BrMatrix34ShearX(br_matrix34* mat, br_scalar sy, br_scalar sz) {
LOG_TRACE("(%p, %f, %f)", mat, sy, sz);
M(0, 0) = 1.f;
M(0, 1) = sy;
M(0, 2) = sz;
M(1, 0) = 0.f;
M(1, 1) = 1.f;
M(1, 2) = 0.f;
M(2, 0) = 0.f;
M(2, 1) = 0.f;
M(2, 2) = 1.f;
M(3, 0) = 0.f;
M(3, 1) = 0.f;
M(3, 2) = 0.f;
}
// IDA: void __cdecl BrMatrix34ShearY(br_matrix34 *mat, br_scalar sx, br_scalar sz)
void BrMatrix34ShearY(br_matrix34* mat, br_scalar sx, br_scalar sz) {
LOG_TRACE("(%p, %f, %f)", mat, sx, sz);
M(0, 0) = 1.f;
M(0, 1) = 0.f;
M(0, 2) = 0.f;
M(1, 0) = sx;
M(1, 1) = 1.f;
M(1, 2) = sz;
M(2, 0) = 0.f;
M(2, 1) = 0.f;
M(2, 2) = 1.f;
M(3, 0) = 0.f;
M(3, 1) = 0.f;
M(3, 2) = 0.f;
}
// IDA: void __cdecl BrMatrix34ShearZ(br_matrix34 *mat, br_scalar sx, br_scalar sy)
void BrMatrix34ShearZ(br_matrix34* mat, br_scalar sx, br_scalar sy) {
LOG_TRACE("(%p, %f, %f)", mat, sx, sy);
M(0, 0) = 1.f;
M(0, 1) = 0.f;
M(0, 2) = 0.f;
M(1, 0) = 0.f;
M(1, 1) = 1.f;
M(1, 2) = 0.f;
M(2, 0) = sx;
M(2, 1) = sy;
M(2, 2) = 1.f;
M(3, 0) = 0.f;
M(3, 1) = 0.f;
M(3, 2) = 0.f;
}
// IDA: br_scalar __cdecl BrMatrix34Inverse(br_matrix34 *B, br_matrix34 *A)
br_scalar BrMatrix34Inverse(br_matrix34* B, br_matrix34* A) {
float idet;
float det;
float pos;
float neg;
float temp;
float AF[4][3];
float BF[4][3];
int i;
LOG_TRACE("(%p, %p)", B, A);
#define AF(x, y) (AF[x][y])
#define BF(x, y) (BF[x][y])
#define ACCUMULATE \
if (temp >= 0.f) \
pos += temp; \
else \
neg += temp;
#define PRECISION_LIMIT BR_SCALAR(1.0e-15)
#define ABS(a) (((a) < 0) ? -(a) : (a))
for (i = 0; i < 4; i++) {
AF(i, 0) = A(i, 0);
AF(i, 1) = A(i, 1);
AF(i, 2) = A(i, 2);
}
pos = neg = 0.0F;
temp = AF(0, 0) * AF(1, 1) * AF(2, 2);
ACCUMULATE
temp = AF(0, 1) * AF(1, 2) * AF(2, 0);
ACCUMULATE
temp = AF(0, 2) * AF(1, 0) * AF(2, 1);
ACCUMULATE
temp = -AF(0, 2) * AF(1, 1) * AF(2, 0);
ACCUMULATE
temp = -AF(0, 1) * AF(1, 0) * AF(2, 2);
ACCUMULATE
temp = -AF(0, 0) * AF(1, 2) * AF(2, 1);
ACCUMULATE
det = pos + neg;
if (ABS(det) <= PRECISION_LIMIT)
return 0.f;
if ((ABS(det / (pos - neg)) < PRECISION_LIMIT)) {
return 0.f;
}
idet = 1.f / det;
BF(0, 0) = (AF(1, 1) * AF(2, 2) - AF(1, 2) * AF(2, 1)) * idet;
BF(1, 0) = -(AF(1, 0) * AF(2, 2) - AF(1, 2) * AF(2, 0)) * idet;
BF(2, 0) = (AF(1, 0) * AF(2, 1) - AF(1, 1) * AF(2, 0)) * idet;
BF(0, 1) = -(AF(0, 1) * AF(2, 2) - AF(0, 2) * AF(2, 1)) * idet;
BF(1, 1) = (AF(0, 0) * AF(2, 2) - AF(0, 2) * AF(2, 0)) * idet;
BF(2, 1) = -(AF(0, 0) * AF(2, 1) - AF(0, 1) * AF(2, 0)) * idet;
BF(0, 2) = (AF(0, 1) * AF(1, 2) - AF(0, 2) * AF(1, 1)) * idet;
BF(1, 2) = -(AF(0, 0) * AF(1, 2) - AF(0, 2) * AF(1, 0)) * idet;
BF(2, 2) = (AF(0, 0) * AF(1, 1) - AF(0, 1) * AF(1, 0)) * idet;
BF(3, 0) = -(AF(3, 0) * BF(0, 0) + AF(3, 1) * BF(1, 0) + AF(3, 2) * BF(2, 0));
BF(3, 1) = -(AF(3, 0) * BF(0, 1) + AF(3, 1) * BF(1, 1) + AF(3, 2) * BF(2, 1));
BF(3, 2) = -(AF(3, 0) * BF(0, 2) + AF(3, 1) * BF(1, 2) + AF(3, 2) * BF(2, 2));
for (i = 0; i < 4; i++) {
B(i, 0) = BF(i, 0);
B(i, 1) = BF(i, 1);
B(i, 2) = BF(i, 2);
}
return det;
}
// IDA: void __cdecl BrMatrix34LPInverse(br_matrix34 *A, br_matrix34 *B)
void BrMatrix34LPInverse(br_matrix34* A, br_matrix34* B) {
LOG_TRACE("(%p, %p)", A, B);
A(0, 0) = B(0, 0);
A(0, 1) = B(1, 0);
A(0, 2) = B(2, 0);
A(1, 0) = B(0, 1);
A(1, 1) = B(1, 1);
A(1, 2) = B(2, 1);
A(2, 0) = B(0, 2);
A(2, 1) = B(1, 2);
A(2, 2) = B(2, 2);
A(3, 0) = -BR_MAC3(B(3, 0), A(0, 0), B(3, 1), A(1, 0), B(3, 2), A(2, 0));
A(3, 1) = -BR_MAC3(B(3, 0), A(0, 1), B(3, 1), A(1, 1), B(3, 2), A(2, 1));
A(3, 2) = -BR_MAC3(B(3, 0), A(0, 2), B(3, 1), A(1, 2), B(3, 2), A(2, 2));
}
// IDA: void __cdecl BrMatrix34LPNormalise(br_matrix34 *A, br_matrix34 *B)
void BrMatrix34LPNormalise(br_matrix34* A, br_matrix34* B) {
LOG_TRACE("(%p, %p)", A, B);
BrVector3Normalise((br_vector3*)A->m[2], (br_vector3*)B->m[2]);
BrVector3Cross((br_vector3*)A->m[0], (br_vector3*)B->m[1], (br_vector3*)A->m[2]);
BrVector3Normalise((br_vector3*)A->m[0], (br_vector3*)A->m[0]);
BrVector3Cross((br_vector3*)A->m[1], (br_vector3*)A->m[2], (br_vector3*)A->m[0]);
A(3, 0) = B(3, 0);
A(3, 1) = B(3, 1);
A(3, 2) = B(3, 2);
}
// IDA: void __cdecl BrMatrix34RollingBall(br_matrix34 *mat, int dx, int dy, int radius)
void BrMatrix34RollingBall(br_matrix34* mat, int dx, int dy, int radius) {
br_scalar nx;
br_scalar ny;
br_scalar ca;
br_scalar sa;
br_scalar dr;
br_scalar h;
LOG_TRACE("(%p, %d, %d, %d)", mat, dx, dy, radius);
// The rolling ball, Graphics Gems III (1993), pages 51-60, Academic Press
dr = sqrtf((float)(dx * dx + dy * dy)); // Pierre-Marie Baty -- added type cast
if (dr == BR_SCALAR(.0f)) {
BrMatrix34Identity(mat);
return;
}
h = sqrtf(dr * dr + radius * radius);
ca = radius / h;
sa = dr / h;
nx = -dy / dr;
ny = dx / dr;
// nz = 0;
h = (1 - ca);
M(0, 0) = nx * nx * h + ca;
M(0, 1) = nx * ny * h;
M(0, 2) = ny * sa;
M(1, 1) = ca + ny * ny * h;
M(1, 2) = -nx * sa;
M(2, 2) = ca;
M(1, 0) = M(0, 1);
M(2, 0) = -M(0, 2);
M(2, 1) = -M(1, 2);
M(3, 0) = BR_SCALAR(0.f);
M(3, 1) = BR_SCALAR(0.f);
M(3, 2) = BR_SCALAR(0.f);
}
// IDA: br_matrix34* __cdecl BrBoundsToMatrix34(br_matrix34 *mat, br_bounds *bounds)
br_matrix34* BrBoundsToMatrix34(br_matrix34* mat, br_bounds* bounds) {
int i;
br_vector3 tr;
br_vector3 sc;
LOG_TRACE("(%p, %p)", mat, bounds);
for (i = 0; i < 3; ++i) {
tr.v[i] = 0.5f * bounds->min.v[i] + 0.5f * bounds->max.v[i];
if (bounds->min.v[i] == bounds->max.v[i]) {
sc.v[i] = 1.f;
} else {
sc.v[i] = 0.5f * bounds->max.v[i] - 0.5f * bounds->min.v[i];
}
}
M(0, 0) = sc.v[0];
M(0, 1) = 0.f;
M(0, 2) = 0.f;
M(1, 0) = 0.f;
M(1, 1) = sc.v[1];
M(1, 2) = 0.f;
M(2, 0) = 0.f;
M(2, 1) = 0.f;
M(2, 2) = sc.v[2];
M(3, 0) = tr.v[0];
M(3, 1) = tr.v[1];
M(3, 2) = tr.v[2];
return mat;
}
// IDA: void __cdecl BrMatrix34Copy4(br_matrix34 *A, br_matrix4 *B)
void BrMatrix34Copy4(br_matrix34* A, br_matrix4* B) {
LOG_TRACE("(%p, %p)", A, B);
A(0, 0) = B(0, 0);
A(0, 1) = B(0, 1);
A(0, 2) = B(0, 2);
A(1, 0) = B(1, 0);
A(1, 1) = B(1, 1);
A(1, 2) = B(1, 2);
A(2, 0) = B(2, 0);
A(2, 1) = B(2, 1);
A(2, 2) = B(2, 2);
A(3, 0) = B(3, 0);
A(3, 1) = B(3, 1);
A(3, 2) = B(3, 2);
}
// IDA: void __usercall BrMatrix34TApplyFV(br_vector3 *A@<EAX>, br_fvector3 *B@<EDX>, br_matrix34 *C@<EBX>)
void BrMatrix34TApplyFV(br_vector3* A, br_fvector3* B, br_matrix34* C) {
LOG_TRACE("(%p, %p, %p)", A, B, C);
A->v[0] = BR_MAC3(B->v[0], C(0, 0), B->v[1], C(0, 1), B->v[2], C(0, 2));
A->v[1] = BR_MAC3(B->v[0], C(1, 0), B->v[1], C(1, 1), B->v[2], C(1, 2));
A->v[2] = BR_MAC3(B->v[0], C(2, 0), B->v[1], C(2, 1), B->v[2], C(2, 2));
}
// IDA: void __cdecl BrMatrix34Apply(br_vector3 *A, br_vector4 *B, br_matrix34 *C)
void BrMatrix34Apply(br_vector3* A, br_vector4* B, br_matrix34* C) {
LOG_TRACE("(%p, %p, %p)", A, B, C);
A->v[0] = BR_MAC4(B->v[0], C(0, 0), B->v[1], C(1, 0), B->v[2], C(2, 0), B->v[3], C(3, 0));
A->v[1] = BR_MAC4(B->v[0], C(0, 1), B->v[1], C(1, 1), B->v[2], C(2, 1), B->v[3], C(3, 1));
A->v[2] = BR_MAC4(B->v[0], C(0, 2), B->v[1], C(1, 2), B->v[2], C(2, 2), B->v[3], C(3, 2));
}
// IDA: void __cdecl BrMatrix34ApplyP(br_vector3 *A, br_vector3 *B, br_matrix34 *C)
void BrMatrix34ApplyP(br_vector3* A, br_vector3* B, br_matrix34* C) {
LOG_TRACE("(%p, %p, %p)", A, B, C);
A->v[0] = BR_MAC3(B->v[0], C(0, 0), B->v[1], C(1, 0), B->v[2], C(2, 0)) + C(3, 0);
A->v[1] = BR_MAC3(B->v[0], C(0, 1), B->v[1], C(1, 1), B->v[2], C(2, 1)) + C(3, 1);
A->v[2] = BR_MAC3(B->v[0], C(0, 2), B->v[1], C(1, 2), B->v[2], C(2, 2)) + C(3, 2);
}
// IDA: void __cdecl BrMatrix34ApplyV(br_vector3 *A, br_vector3 *B, br_matrix34 *C)
void BrMatrix34ApplyV(br_vector3* A, br_vector3* B, br_matrix34* C) {
LOG_TRACE("(%p, %p, %p)", A, B, C);
A->v[0] = BR_MAC3(B->v[0], C(0, 0), B->v[1], C(1, 0), B->v[2], C(2, 0));
A->v[1] = BR_MAC3(B->v[0], C(0, 1), B->v[1], C(1, 1), B->v[2], C(2, 1));
A->v[2] = BR_MAC3(B->v[0], C(0, 2), B->v[1], C(1, 2), B->v[2], C(2, 2));
}
// IDA: void __cdecl BrMatrix34TApply(br_vector4 *A, br_vector4 *B, br_matrix34 *C)
void BrMatrix34TApply(br_vector4* A, br_vector4* B, br_matrix34* C) {
LOG_TRACE("(%p, %p, %p)", A, B, C)
A->v[0] = BR_MAC3(B->v[0], C(0, 0), B->v[1], C(0, 1), B->v[2], C(0, 2));
A->v[1] = BR_MAC3(B->v[0], C(1, 0), B->v[1], C(1, 1), B->v[2], C(1, 2));
A->v[2] = BR_MAC3(B->v[0], C(2, 0), B->v[1], C(2, 1), B->v[2], C(2, 2));
A->v[3] = BR_MAC3(B->v[0], C(3, 0), B->v[1], C(3, 1), B->v[2], C(3, 2)) + B->v[3];
}
// IDA: void __cdecl BrMatrix34TApplyP(br_vector3 *A, br_vector3 *B, br_matrix34 *C)
void BrMatrix34TApplyP(br_vector3* A, br_vector3* B, br_matrix34* C) {
LOG_TRACE("(%p, %p, %p)", A, B, C);
// translation elements are presumed zero or irrelevant
A->v[0] = BR_MAC3(B->v[0], C(0, 0), B->v[1], C(0, 1), B->v[2], C(0, 2));
A->v[1] = BR_MAC3(B->v[0], C(1, 0), B->v[1], C(1, 1), B->v[2], C(1, 2));
A->v[2] = BR_MAC3(B->v[0], C(2, 0), B->v[1], C(2, 1), B->v[2], C(2, 2));
}
// IDA: void __cdecl BrMatrix34TApplyV(br_vector3 *A, br_vector3 *B, br_matrix34 *C)
void BrMatrix34TApplyV(br_vector3* A, br_vector3* B, br_matrix34* C) {
LOG_TRACE("(%p, %p, %p)", A, B, C);
// translation elements are presumed zero or irrelevant
A->v[0] = BR_MAC3(B->v[0], C(0, 0), B->v[1], C(0, 1), B->v[2], C(0, 2));
A->v[1] = BR_MAC3(B->v[0], C(1, 0), B->v[1], C(1, 1), B->v[2], C(1, 2));
A->v[2] = BR_MAC3(B->v[0], C(2, 0), B->v[1], C(2, 1), B->v[2], C(2, 2));
}
// IDA: void __cdecl BrMatrix34Pre(br_matrix34 *mat, br_matrix34 *A)
void BrMatrix34Pre(br_matrix34* mat, br_matrix34* A) {
LOG_TRACE("(%p, %p)", mat, A);
BrMatrix34Mul(&mattmp1, A, mat);
BrMatrix34Copy(mat, &mattmp1);
}
// IDA: void __cdecl BrMatrix34Post(br_matrix34 *mat, br_matrix34 *A)
void BrMatrix34Post(br_matrix34* mat, br_matrix34* A) {
LOG_TRACE("(%p, %p)", mat, A);
BrMatrix34Mul(&mattmp1, mat, A);
BrMatrix34Copy(mat, &mattmp1);
}
// IDA: void __cdecl BrMatrix34PreRotateX(br_matrix34 *mat, br_angle rx)
void BrMatrix34PreRotateX(br_matrix34* mat, br_angle rx) {
LOG_TRACE("(%p, %d)", mat, rx);
BrMatrix34RotateX(&mattmp2, rx);
BrMatrix34Mul(&mattmp1, &mattmp2, mat);
BrMatrix34Copy(mat, &mattmp1);
}
// IDA: void __cdecl BrMatrix34PostRotateX(br_matrix34 *mat, br_angle rx)
void BrMatrix34PostRotateX(br_matrix34* mat, br_angle rx) {
LOG_TRACE("(%p, %d)", mat, rx);
BrMatrix34RotateX(&mattmp2, rx);
BrMatrix34Mul(&mattmp1, mat, &mattmp2);
BrMatrix34Copy(mat, &mattmp1);
}
// IDA: void __cdecl BrMatrix34PreRotateY(br_matrix34 *mat, br_angle ry)
void BrMatrix34PreRotateY(br_matrix34* mat, br_angle ry) {
LOG_TRACE("(%p, %d)", mat, ry);
BrMatrix34RotateY(&mattmp2, ry);
BrMatrix34Mul(&mattmp1, &mattmp2, mat);
BrMatrix34Copy(mat, &mattmp1);
}
// IDA: void __cdecl BrMatrix34PostRotateY(br_matrix34 *mat, br_angle ry)
void BrMatrix34PostRotateY(br_matrix34* mat, br_angle ry) {
LOG_TRACE("(%p, %d)", mat, ry);
BrMatrix34RotateY(&mattmp2, ry);
BrMatrix34Mul(&mattmp1, mat, &mattmp2);
BrMatrix34Copy(mat, &mattmp1);
}
// IDA: void __cdecl BrMatrix34PreRotateZ(br_matrix34 *mat, br_angle rz)
void BrMatrix34PreRotateZ(br_matrix34* mat, br_angle rz) {
LOG_TRACE("(%p, %d)", mat, rz);
BrMatrix34RotateZ(&mattmp2, rz);
BrMatrix34Mul(&mattmp1, &mattmp2, mat);
BrMatrix34Copy(mat, &mattmp1);
}
// IDA: void __cdecl BrMatrix34PostRotateZ(br_matrix34 *mat, br_angle rz)
void BrMatrix34PostRotateZ(br_matrix34* mat, br_angle rz) {
LOG_TRACE("(%p, %d)", mat, rz);
BrMatrix34RotateZ(&mattmp2, rz);
BrMatrix34Mul(&mattmp1, mat, &mattmp2);
BrMatrix34Copy(mat, &mattmp1);
}
// IDA: void __cdecl BrMatrix34PreRotate(br_matrix34 *mat, br_angle r, br_vector3 *axis)
void BrMatrix34PreRotate(br_matrix34* mat, br_angle r, br_vector3* axis) {
LOG_TRACE("(%p, %d, %p)", mat, r, axis);
BrMatrix34Rotate(&mattmp2, r, axis);
BrMatrix34Mul(&mattmp1, &mattmp2, mat);
BrMatrix34Copy(mat, &mattmp1);
}
// IDA: void __cdecl BrMatrix34PostRotate(br_matrix34 *mat, br_angle r, br_vector3 *axis)
void BrMatrix34PostRotate(br_matrix34* mat, br_angle r, br_vector3* axis) {
LOG_TRACE("(%p, %d, %p)", mat, r, axis);
BrMatrix34Rotate(&mattmp2, r, axis);
BrMatrix34Mul(&mattmp1, mat, &mattmp2);
BrMatrix34Copy(mat, &mattmp1);
}
// IDA: void __cdecl BrMatrix34PreTranslate(br_matrix34 *mat, br_scalar x, br_scalar y, br_scalar z)
void BrMatrix34PreTranslate(br_matrix34* mat, br_scalar x, br_scalar y, br_scalar z) {
LOG_TRACE("(%p, %f, %f, %f)", mat, x, y, z);
BrMatrix34Translate(&mattmp2, x, y, z);
BrMatrix34Mul(&mattmp1, &mattmp2, mat);
BrMatrix34Copy(mat, &mattmp1);
}
// IDA: void __cdecl BrMatrix34PostTranslate(br_matrix34 *mat, br_scalar x, br_scalar y, br_scalar z)
void BrMatrix34PostTranslate(br_matrix34* mat, br_scalar x, br_scalar y, br_scalar z) {
LOG_TRACE("(%p, %f, %f, %f)", mat, x, y, z);
M(3, 0) += x;
M(3, 1) += y;
M(3, 2) += z;
}
// IDA: void __cdecl BrMatrix34PreScale(br_matrix34 *mat, br_scalar sx, br_scalar sy, br_scalar sz)
void BrMatrix34PreScale(br_matrix34* mat, br_scalar sx, br_scalar sy, br_scalar sz) {
LOG_TRACE("(%p, %f, %f, %f)", mat, sx, sy, sz);
BrMatrix34Scale(&mattmp2, sx, sy, sz);
BrMatrix34Mul(&mattmp1, &mattmp2, mat);
BrMatrix34Copy(mat, &mattmp1);
}
// IDA: void __cdecl BrMatrix34PostScale(br_matrix34 *mat, br_scalar sx, br_scalar sy, br_scalar sz)
void BrMatrix34PostScale(br_matrix34* mat, br_scalar sx, br_scalar sy, br_scalar sz) {
LOG_TRACE("(%p, %f, %f, %f)", mat, sx, sy, sz);
BrMatrix34Scale(&mattmp1, sx, sy, sz);
BrMatrix34Mul(&mattmp2, mat, &mattmp1);
BrMatrix34Copy(mat, &mattmp2);
}
// IDA: void __cdecl BrMatrix34PreShearX(br_matrix34 *mat, br_scalar sy, br_scalar sz)
void BrMatrix34PreShearX(br_matrix34* mat, br_scalar sy, br_scalar sz) {
LOG_TRACE("(%p, %f, %f)", mat, sy, sz);
BrMatrix34ShearX(&mattmp2, sy, sz);
BrMatrix34Mul(&mattmp1, &mattmp2, mat);
BrMatrix34Copy(mat, &mattmp1);
}
// IDA: void __cdecl BrMatrix34PostShearX(br_matrix34 *mat, br_scalar sy, br_scalar sz)
void BrMatrix34PostShearX(br_matrix34* mat, br_scalar sy, br_scalar sz) {
LOG_TRACE("(%p, %f, %f)", mat, sy, sz);
BrMatrix34ShearX(&mattmp2, sy, sz);
BrMatrix34Mul(&mattmp1, mat, &mattmp2);
BrMatrix34Copy(mat, &mattmp1);
}
// IDA: void __cdecl BrMatrix34PreShearY(br_matrix34 *mat, br_scalar sx, br_scalar sz)
void BrMatrix34PreShearY(br_matrix34* mat, br_scalar sx, br_scalar sz) {
LOG_TRACE("(%p, %f, %f)", mat, sx, sz);
BrMatrix34ShearY(&mattmp2, sx, sz);
BrMatrix34Mul(&mattmp1, &mattmp2, mat);
BrMatrix34Copy(mat, &mattmp1);
}
// IDA: void __cdecl BrMatrix34PostShearY(br_matrix34 *mat, br_scalar sx, br_scalar sz)
void BrMatrix34PostShearY(br_matrix34* mat, br_scalar sx, br_scalar sz) {
LOG_TRACE("(%p, %f, %f)", mat, sx, sz);
BrMatrix34ShearY(&mattmp2, sx, sz);
BrMatrix34Mul(&mattmp1, mat, &mattmp2);
BrMatrix34Copy(mat, &mattmp1);
}
// IDA: void __cdecl BrMatrix34PreShearZ(br_matrix34 *mat, br_scalar sx, br_scalar sy)
void BrMatrix34PreShearZ(br_matrix34* mat, br_scalar sx, br_scalar sy) {
LOG_TRACE("(%p, %f, %f)", mat, sx, sy);
BrMatrix34ShearZ(&mattmp2, sx, sy);
BrMatrix34Mul(&mattmp1, &mattmp2, mat);
BrMatrix34Copy(mat, &mattmp1);
}
// IDA: void __cdecl BrMatrix34PostShearZ(br_matrix34 *mat, br_scalar sx, br_scalar sy)
void BrMatrix34PostShearZ(br_matrix34* mat, br_scalar sx, br_scalar sy) {
LOG_TRACE("(%p, %f, %f)", mat, sx, sy);
BrMatrix34ShearZ(&mattmp2, sx, sy);
BrMatrix34Mul(&mattmp1, mat, &mattmp2);
BrMatrix34Copy(mat, &mattmp1);
}