93 lines
3 KiB
C++
93 lines
3 KiB
C++
#include "memory.h"
|
|
#include "stdlib.h"
|
|
#include "HeadTracker.h"
|
|
#include "FERN.h"
|
|
|
|
DECLARE_IO_H(LearnBase);
|
|
|
|
/****************************************************************************************************************/
|
|
/****************************************************************************************************************/
|
|
/* FERNS IO */
|
|
/****************************************************************************************************************/
|
|
/****************************************************************************************************************/
|
|
|
|
u32 LearnBase_LoadSave(IO_STRUCT *IO,LearnBase *LB)
|
|
{
|
|
CHECK_VERSION(0);
|
|
|
|
ReadSave_U32(IO,&LB->PatchNumber);
|
|
ReadSave_U32(IO,&LB->Pitch);
|
|
ReadSave_U32(IO,&LB->ActiveFern);
|
|
Signify_Ptr(IO,(void**)&LB->PatchKnowledge,FERN_PatchKnowledgeSize(LB));
|
|
ReadSave(IO,LB->PatchKnowledge,FERN_PatchKnowledgeSize(LB));
|
|
if (IO->LSD & LSD_CREATE) ValidateFern(LB);
|
|
|
|
CHECK_END();
|
|
}
|
|
|
|
DECLARE_IO_C(LearnBase);
|
|
|
|
/****************************************************************************************************************/
|
|
/****************************************************************************************************************/
|
|
/* IDFX IO */
|
|
/****************************************************************************************************************/
|
|
/****************************************************************************************************************/
|
|
u32 IDFX_LoadSave(IO_STRUCT *IO,IDFX *ID)
|
|
{
|
|
CHECK_VERSION(3);
|
|
|
|
ReadSave_U32(IO,&ID->NumberOfPoints);
|
|
if (Version <= 0)
|
|
{
|
|
ReadSave(IO,&ID->SF_U,sizeof(STATE_FLAGS_V0));
|
|
ID->SF_U.IsAnimatedTrack = 0;
|
|
}
|
|
else
|
|
ReadSave(IO,&ID->SF_U,sizeof(STATE_FLAGS));
|
|
ID->SF_T = ID->SF_U;
|
|
|
|
ReadSave_Vector(IO,ID->_3D_Init_Coordinate, ID->NumberOfPoints);
|
|
ReadSave_Vector(IO,ID->_3D_Estimated_Coordinate,ID->NumberOfPoints);
|
|
ReadSave_Vector(IO,ID->_3D_CreationDirection, ID->NumberOfPoints);
|
|
ReadSave_U32(IO,ID->GoodMatches, ID->NumberOfPoints);
|
|
ReadSave_U32(IO,ID->PositivesMatches, ID->NumberOfPoints);
|
|
ReadSave_Vector(IO,&ID->vModelScale);
|
|
|
|
// Mesh is fully included into ID descriptor
|
|
Signify_Ptr(IO,(void**)&ID->p_UsedMesh,sizeof(Mesh));
|
|
if (ID->p_UsedMesh && Mesh_LoadSave(IO,ID->p_UsedMesh)) return IO_FAIL(IO);
|
|
Signify_Ptr(IO,(void**)&ID->LB,sizeof(LearnBase));
|
|
if (ID->LB && LearnBase_LoadSave(IO,ID->LB)) return IO_FAIL(IO);
|
|
|
|
if (Version >= 2)
|
|
{
|
|
ReadSave_Vector(IO,&ID->HaarParameter);
|
|
} else
|
|
ID->HaarParameter = Vector(1,0,0);
|
|
|
|
|
|
|
|
if (IO->LSD & LSD_CREATE)
|
|
{
|
|
memset(ID->Previous_TPS_2_Match , 0xff , sizeof(ID->Previous_TPS_2_Match));
|
|
ID->NumberOfInterframes = 0;
|
|
ID->CurrentMatrix_U.Identity();
|
|
ID->CurrentMatrix_U.T.z = 100.0f;
|
|
ID->CurrentMatrix_T = ID->CurrentMatrix_U;
|
|
ID->SF_U.FlyStart = 0;
|
|
ID->SF_U.FromScratch = 1;
|
|
ID->SF_U.Booted = 1;
|
|
ID->SF_U.Ready2Learn = 0;
|
|
ID->SF_U.DrawText = 0;
|
|
ID->SF_U.DrawMesh = 0;
|
|
ID->SF_U.ContinuousLearn = 0;
|
|
ID->SF_U.IsAnimatedTrack = 0;
|
|
ID->SF_T = ID->SF_U;
|
|
|
|
}
|
|
|
|
CHECK_END();
|
|
}
|
|
|
|
DECLARE_IO_C(IDFX);
|
|
|