mirror of
https://github.com/pret/pmd-sky.git
synced 2026-09-10 12:28:09 -05:00
move rest of nitro fx files to src
This commit is contained in:
@@ -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
17
lib/NitroSDK/src/fx/fx.c
Normal 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));
|
||||
|
||||
}
|
||||
85
lib/NitroSDK/src/fx/fx_vec.c
Normal file
85
lib/NitroSDK/src/fx/fx_vec.c
Normal 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>
|
||||
@@ -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);
|
||||
|
||||
50
lib/include/nitro/fx/fx_vec.h
Normal file
50
lib/include/nitro/fx/fx_vec.h
Normal 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
|
||||
4
main.lsf
4
main.lsf
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user