JD2022-TU1/main/extern/Camcam/HeadTracker/IO_HeadTracker.cpp

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);