예제 #1
0
 /// Sets one of the lightmap textures used for rendering the sector mesh.
 inline void SetLightmapTexture(int iSampler, VTextureObject *pTex, int iSubIndex)
 {
   SetTextureBySamplerIndex(pTex, iSampler);
   m_iLightmapSamplerIndex[iSubIndex] = iSampler;
 }
예제 #2
0
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;
      }