fae0beef创建于 7月26日历史提交
/**
 * BK math helpers (vector/tuple macros).
 *
 * [port] Named bk_math.h rather than math.h to avoid shadowing the system
 * <math.h> on modern toolchains — Lighthouse's CMake adds include/ to -I, so
 * a local math.h would be picked up ahead of the C standard header (which we
 * need for sqrtf). Upstream decomp calls this file math.h because N64/libultra
 * has no system <math.h> to collide with.
 */
#ifndef __BANJO_KAZOOIE_MATH_H__
#define __BANJO_KAZOOIE_MATH_H__
#include <math.h>
#define SQ(x) ((x)*(x))

#define TUPLE_ASSIGN(out, a, b, c) {\
    out[0] = a;\
    out[1] = b;\
    out[2] = c;\
}

#define TUPLE_SET(dst, value) { dst[0] = dst[1] = dst[2] = value; }

#define TUPLE_COPY(dst, src) {\
    dst[0] = src[0];\
    dst[1] = src[1];\
    dst[2] = src[2];\
}

#define TUPLE_ADD(dst, vec) { \
    dst[0] += vec[0]; \
    dst[1] += vec[1]; \
    dst[2] += vec[2]; \
}

#define TUPLE_ADD_COPY(dst, vec1, vec2) { \
    dst[0] = vec1[0] + vec2[0]; \
    dst[1] = vec1[1] + vec2[1]; \
    dst[2] = vec1[2] + vec2[2]; \
}

#define TUPLE_DIFF(dst, vec) { \
    dst[0] -= vec[0]; \
    dst[1] -= vec[1]; \
    dst[2] -= vec[2]; \
}

#define TUPLE_DIFF_COPY(dst, vec1, vec2) { \
    dst[0] = vec1[0] - vec2[0]; \
    dst[1] = vec1[1] - vec2[1]; \
    dst[2] = vec1[2] - vec2[2]; \
}

#define TUPLE_MULTIPLY_COPY(dst, vec1, vec2) { \
    dst[0] = vec1[0] * vec2[0]; \
    dst[1] = vec1[1] * vec2[1]; \
    dst[2] = vec1[2] * vec2[2]; \
}

#define TUPLE_SCALE(vec, value) { \
    vec[0] *= value; \
    vec[1] *= value; \
    vec[2] *= value; \
}

#define TUPLE_SCALE_COPY(dst, vec, value) { \
    dst[0] = vec[0] * value; \
    dst[1] = vec[1] * value; \
    dst[2] = vec[2] * value; \
}

#define TUPLE_CROSS_PRODUCT(dst, vec1, vec2) { \
    dst[0] = vec1[1] * vec2[2] - vec1[2] * vec2[1]; \
    dst[1] = vec1[2] * vec2[0] - vec1[0] * vec2[2]; \
    dst[2] = vec1[0] * vec2[1] - vec1[1] * vec2[0]; \
}

#define LENGTH_SQ_VEC3F(v) (v[0]*v[0] + v[1]*v[1] + v[2]*v[2])
//#define LENGTH_VEC3F(v) gu_sqrtf(LENGTH_SQ_VEC3F(v))
#define LENGTH_VEC3F(v) sqrtf(LENGTH_SQ_VEC3F(v))

#define TUPLE_DOT_PRODUCT(vec1, vec2) (vec1[0] * vec2[0] + vec1[1] * vec2[1] + vec1[2] * vec2[2])

#endif // __BANJO_KAZOOIE_MATH_H__