void DiMeshSerializer::ImportMesh( DiDataStreamPtr& stream, DiMesh* pDest ) { DI_SERIAL_LOG("Loading mesh : %s", stream->GetName().c_str()); char sign[4]; stream->Read(sign,4); if (CheckHead(sign)) { uint16 version; stream->Read(&version,sizeof(uint16)); DI_SERIAL_LOG("Mesh version: %d", version); if (version >= MODEL_SERIAL_VERSION_NUM) { DI_ERROR("Unknow mesh version."); return; } DiMeshSerializerImpl* impl = GetImplemention((DiMeshSerialVersion)version); if (impl) { impl->ImportMesh(stream,pDest); } DI_DELETE impl; return; } DI_ERROR("Invalid mesh file head."); return; }
void DiMotionSerializer::ImportMotion( DiDataStreamPtr& stream, DiMotion* pDest ) { char sign[4]; stream->Read(sign,4); if (sign[0] == 'D' && sign[1] == 'i' && sign[2] == 'M' && sign[3] == 'o') { uint16 version; stream->Read(&version,sizeof(uint16)); if (version >= MOTION_SERIAL_VERSION_NUM) { DI_ERROR("Invalid version number!"); return; } DiMotionSerializerImpl* impl = GetImplemention((DiMotionSerialVersion)version); if (impl) { impl->ImportMotion(stream,pDest); } DI_DELETE impl; return; } DI_ERROR("Invalid head format!"); return; }
void DiMeshSerializer::ExportMesh( const DiMeshPtr pMesh, DiDataStreamPtr stream ) { static char head[4] = { 'D', 'e', 'm', 'i' }; stream->Write(head, 4); uint16 version = MODEL_SERIAL_VERSION_NUM - 1; stream->Write(&version,sizeof(uint16)); DiMeshSerializerImpl* impl = GetImplemention((DiMeshSerialVersion)version); if (impl) { impl->ExportMesh(pMesh.get(),stream); } DI_DELETE impl; }
void DiMotionSerializer::ExportMotion( const DiMotionPtr pMotion, DiDataStreamPtr stream ) { char sign[4]; sign[0] = 'D'; sign[1] = 'i'; sign[2] = 'M'; sign[3] = 'o'; stream->Write(sign,4); uint16 version = MOTION_SERIAL_VERSION_NUM - 1; stream->Write(&version,sizeof(uint16)); DiMotionSerializerImpl* impl = GetImplemention((DiMotionSerialVersion)version); if (impl) { impl->ExportMotion(pMotion.get(),stream); } DI_DELETE impl; }