move rest of nitro fx files to src

This commit is contained in:
Seth Barberee
2026-06-29 13:48:27 -07:00
parent a2b739e718
commit f39cdece9e
6 changed files with 156 additions and 12 deletions

View File

@@ -1,9 +0,0 @@
.include "asm/macros.inc"
.text
arm_func_start FX_Init
FX_Init: ; 0x02076070
bx lr
arm_func_end FX_Init

17
lib/NitroSDK/src/fx/fx.c Normal file
View File

@@ -0,0 +1,17 @@
#include <nitro.h>
void FX_Init(void)
{
SDK_ASSERT(2 == sizeof(fx16));
SDK_ASSERT(4 == sizeof(fx32));
SDK_ASSERT(8 == sizeof(fx64));
SDK_ASSERT(8 == sizeof(fx64c));
SDK_ASSERT(6 == sizeof(VecFx16));
SDK_ASSERT(12 == sizeof(VecFx32));
SDK_ASSERT(64 == sizeof(MtxFx44));
SDK_ASSERT(48 == sizeof(MtxFx43));
SDK_ASSERT(36 == sizeof(MtxFx33));
SDK_ASSERT(16 == sizeof(MtxFx22));
}

View File

@@ -0,0 +1,85 @@
#include <nitro/fx/fx_vec.h>
#include <nitro/fx/fx_cp.h>
#include <nitro/fx/fx_const.h>
#include <nitro.h>
#include <nitro/code32.h>
fx32 VEC_DotProduct (const VecFx32 *a, const VecFx32 *b)
{
SDK_NULL_ASSERT(a);
SDK_NULL_ASSERT(b);
return (fx32)(((fx64)a->x * b->x +
(fx64)a->y * b->y + (fx64)a->z * b->z + (1 << (FX64_SHIFT - 1))) >> FX64_SHIFT);
}
void VEC_CrossProduct (const VecFx32 *a, const VecFx32 *b, VecFx32 *axb)
{
fx32 x, y, z;
SDK_NULL_ASSERT(a);
SDK_NULL_ASSERT(b);
SDK_NULL_ASSERT(axb);
x = (fx32)(((fx64)a->y * b->z - (fx64)a->z * b->y + (1 << (FX64_SHIFT - 1))) >> FX64_SHIFT);
y = (fx32)(((fx64)a->z * b->x - (fx64)a->x * b->z + (1 << (FX64_SHIFT - 1))) >> FX64_SHIFT);
z = (fx32)(((fx64)a->x * b->y - (fx64)a->y * b->x + (1 << (FX64_SHIFT - 1))) >> FX32_SHIFT);
axb->x = x;
axb->y = y;
axb->z = z;
}
void VEC_Normalize (const VecFx32 *pSrc, VecFx32 *pDst)
{
fx64 t;
s32 sqrt;
SDK_NULL_ASSERT(pSrc);
SDK_NULL_ASSERT(pDst);
SDK_ASSERT(!CP_IsDivBusy() && !CP_IsSqrtBusy());
t = (fx64)pSrc->x * pSrc->x;
t += (fx64)pSrc->y * pSrc->y;
t += (fx64)pSrc->z * pSrc->z;
SDK_ASSERTMSG(t > 0, "*pSrc is (0, 0, 0)");
SDK_WARNING(1LL << (FX32_SHIFT + FX32_SHIFT + FX64C_SHIFT) >= (u64)t, "*pSrc is too large!");
CP_SetDiv64_64(1LL << (FX32_SHIFT + FX32_SHIFT + FX64C_SHIFT), (u64)t);
CP_SetSqrt64((u64)(t << 2));
sqrt = (s32)CP_GetSqrtResult32();
t = CP_GetDivResult64();
t = t * sqrt;
pDst->x = (fx32)((t * pSrc->x + (1LL << (32 + FX32_SHIFT))) >> (32 + FX32_SHIFT + 1));
pDst->y = (fx32)((t * pSrc->y + (1LL << (32 + FX32_SHIFT))) >> (32 + FX32_SHIFT + 1));
pDst->z = (fx32)((t * pSrc->z + (1LL << (32 + FX32_SHIFT))) >> (32 + FX32_SHIFT + 1));
}
fx32 VEC_Distance (const VecFx32 *v1, const VecFx32 *v2)
{
fx64 tmp;
fx32 diff;
SDK_NULL_ASSERT(v1);
SDK_NULL_ASSERT(v2);
diff = v1->x - v2->x;
tmp = (fx64)diff * diff;
diff = v1->y - v2->y;
tmp += (fx64)diff * diff;
diff = v1->z - v2->z;
tmp += (fx64)diff * diff;
tmp <<= 2;
CP_SetSqrt64((u64)tmp);
return ((fx32)CP_GetSqrtResult32() + 1) >> 1;
}
#include <nitro/codereset.h>

View File

@@ -183,8 +183,9 @@ typedef struct {
} MtxFx22;
#endif
void FX_Init(void);
// #if !(defined(SDK_WIN32) || defined(SDK_FROM_TOOL))
// void FX_Init(void);
//
// SDK_DECL_INLINE s32 FX_Whole(fx32 v);
// SDK_DECL_INLINE fx32 FX_Floor(fx32 v);

View File

@@ -0,0 +1,50 @@
#ifndef NITRO_FX_VEC_H_
#define NITRO_FX_VEC_H_
#include <nitro/fx/fx.h>
#ifdef __cplusplus
extern "C" {
#endif
void VEC_Add(const VecFx32 * a, const VecFx32 * b, VecFx32 * ab);
void VEC_Subtract(const VecFx32 * a, const VecFx32 * b, VecFx32 * ab);
fx32 VEC_DotProduct(const VecFx32 * a, const VecFx32 * b);
void VEC_CrossProduct(const VecFx32 * a, const VecFx32 * b, VecFx32 * axb);
fx32 VEC_Mag(const VecFx32 * v);
fx32 VEC_Distance(const VecFx32 * v1, const VecFx32 * v2);
void VEC_Normalize(const VecFx32 * pSrc, VecFx32 * pDst);
void VEC_MultAdd(fx32 a, const VecFx32 * v1, const VecFx32 * v2, VecFx32 * pDest);
void VEC_MultSubtract(fx32 a, const VecFx32 * v1, const VecFx32 * v2, VecFx32 * pDest);
void VEC_Fx16Add(const VecFx16 * a, const VecFx16 * b, VecFx16 * ab);
void VEC_Fx16Subtract(const VecFx16 * a, const VecFx16 * b, VecFx16 * ab);
fx32 VEC_Fx16DotProduct(const VecFx16 * a, const VecFx16 * b);
void VEC_Fx16CrossProduct(const VecFx16 * a, const VecFx16 * b, VecFx16 * axb);
fx32 VEC_Fx16Mag(const VecFx16 * v);
fx32 VEC_Fx16Distance(const VecFx16 * v1, const VecFx16 * v2);
void VEC_Fx16Normalize(const VecFx16 * pSrc, VecFx16 * pDst);
SDK_INLINE void VEC_Set (VecFx32 * a, fx32 x, fx32 y, fx32 z)
{
SDK_NULL_ASSERT(a);
a->x = x;
a->y = y;
a->z = z;
}
SDK_INLINE void VEC_Fx16Set (VecFx16 * a, fx16 x, fx16 y, fx16 z)
{
SDK_NULL_ASSERT(a);
a->x = x;
a->y = y;
a->z = z;
}
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -226,9 +226,9 @@ Static main
### NitroSDK ###
Object lib/NitroSDK/asm/mtx.o
Object lib/NitroSDK/src/fx/fx_cp.o
Object lib/NitroSDK/asm/fx_vec.o
Object lib/NitroSDK/src/fx/fx_vec.o
Object lib/NitroSDK/src/fx/fx_atanidx.o
Object lib/NitroSDK/asm/fx_fx.o
Object lib/NitroSDK/src/fx/fx.o
Object lib/NitroSDK/asm/gx.o
Object lib/NitroSDK/asm/gxstate.o
Object lib/NitroSDK/asm/gx_vramcnt.o