inline void SerializeX(VArchive &ar) { if (ar.IsLoading()) { int iBitCount; ar >> iBitCount; AllocateBitfield(iBitCount); const int iIntCount = GetIntCount(); if (iIntCount>0) ar.Read(GetIntArray(),iIntCount*sizeof(int),"i",iIntCount); } else
void VCurve2DBase::SerializeX( VArchive &ar ) { char iVersion = 0; if (ar.IsLoading()) { int iLookupCount; ar >> iVersion; VASSERT(iVersion==0); ar >> m_iNumCurvePoints; AllocatePoints(m_iNumCurvePoints); if (m_iNumCurvePoints>0) ar.Read(m_pPoints,m_iNumCurvePoints*sizeof(VCurvePoint2D),"ffffff",m_iNumCurvePoints); ar >> m_fDuration >> m_fMax; ar >> iLookupCount; if (iLookupCount>0) CreateLookup(iLookupCount); } else
void VTerrainSectorMeshPageInfo::SerializeX(VTerrainSector *pOwner, VArchive &ar, int iLocalVersion) { if (ar.IsLoading()) { if(iLocalVersion >= SECTOR_FILE_VERSION_21) { char magic[4]; ar.Read(magic, 4); VASSERT(magic[0] == 0x50); VASSERT(magic[1] == 0x61); VASSERT(magic[2] == 0x67); VASSERT(magic[3] == 0x65); } ar.Read(m_fLODThreshold,(MAX_MESH_LOD-1)*sizeof(float),"f",(MAX_MESH_LOD-1)); ar >> m_bHasHoles >> m_bAllHoles; if (m_bHasHoles && !m_bAllHoles) { short iLevels; ar >> iLevels; VASSERT(iLevels == pOwner->m_Config.m_iMaxMeshLODHoles+1); for (int i=0;i<iLevels;i++) m_HoleLODInfo[i].SerializeX(ar,iLocalVersion); m_spHoleIndexBuffer = new VisMeshBuffer_cl(); m_spHoleIndexBuffer->SetResourceFlag(VRESOURCEFLAG_AUTODELETE); #ifdef HK_DEBUG m_spHoleIndexBuffer->SetFilename("<TerrainHoleIndexBuffer>"); #endif m_spHoleIndexBuffer->SerializeX(ar); } if(iLocalVersion >= SECTOR_FILE_VERSION_21) { char iTextureType; VTextureObject* pLayer[16]; for (int i=0;i<16;i++) { ar >> iTextureType; switch (iTextureType) { case SECTOR_TEXTURETYPE_NULL : pLayer[i] = pOwner->GetSectorManager()->GetPlainBlackTexture();break; // this is a "real" black texture with alpha==0 case SECTOR_TEXTURETYPE_WHITE : pLayer[i] = Vision::TextureManager.GetPlainWhiteTexture();break; case SECTOR_TEXTURETYPE_BLACK : pLayer[i] = Vision::TextureManager.GetPlainBlackTexture();break; // this one has alpha==255 case SECTOR_TEXTURETYPE_FILE : pLayer[i] = VTextureObject::DoArchiveExchange(ar, NULL);break; case SECTOR_TEXTURETYPE_NEUTRALNORMAL: pLayer[i] = Vision::TextureManager.GetNeutralNormalMapTexture();break; default: VASSERT(!"Invalid texture type. File corrupt?"); } if (pLayer[i]) // valid for all types of texture pLayer[i]->SetResourceFlag(VRESOURCEFLAG_AUTODELETE); SetTextureBySamplerIndex(pLayer[i], i); } ar >> m_iSamplerClampMask; int iRegCountInFile; ar >> iRegCountInFile; m_iPixelShaderRegCount = hkvMath::Max(iRegCountInFile,6); #if defined(_VR_DX11) m_SectorPSConstBuffer.AllocateBuffer(0,m_iPixelShaderRegCount*sizeof(hkvVec4)); #endif hkvVec4* pPixelConst = LockPixelConst(); ar.Read(pPixelConst,iRegCountInFile*sizeof(hkvVec4),"ffff",iRegCountInFile); UpdateNormalmapRegister (pPixelConst); UnLockPixelConst(); ar >> m_iNumThreeWayMappingLayer; if (m_iNumThreeWayMappingLayer > 0) { ar >> m_iThreeWayMappingLayerMask; }