Example #1
0
 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
Example #2
0
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;
      }