Esempio n. 1
0
bool LightmapManager::LoadLightGridInfo(const char *szFilename)
{
  VLightGrid_cl *pGrid = Vision::RenderLoopHelper.GetLightGrid();
  if (!pLightGridInfo)
    pLightGridInfo = new LightGridTweakInfo();


  pLightGridInfo->ReleaseColors();

  VChunkFile loader;
  if (loader.Open(szFilename, Vision::File.GetManager()))
  {
    CHUNKIDTYPE iChunkID;
    while (loader.OpenChunk(&iChunkID))
    {
      if (iChunkID=='LGIB')
      {
        loader.ReadInt(pLightGridInfo->m_iFlatColorCount);
        pLightGridInfo->m_pBaseColors = new hkvVec3[pLightGridInfo->m_iFlatColorCount];
        loader.Read(pLightGridInfo->m_pBaseColors, pLightGridInfo->m_iFlatColorCount*sizeof(hkvVec3));
        bLightGridBase = pLightGridInfo->m_bHasBase=true;
      }
      if (iChunkID=='LGIR')
      {
        loader.ReadInt(pLightGridInfo->m_iFlatColorCount);
        pLightGridInfo->m_pRadiosityColors = new hkvVec3[pLightGridInfo->m_iFlatColorCount];
        loader.Read(pLightGridInfo->m_pRadiosityColors, pLightGridInfo->m_iFlatColorCount*sizeof(hkvVec3));
        bLightGridRadiosity = pLightGridInfo->m_bHasRadiosity=true;
      }
      loader.EndChunk();
    }

    loader.Close();
    if (pLightGridInfo->m_iFlatColorCount>0)
      pLightGridInfo->m_pMixResult = new hkvVec3[pLightGridInfo->m_iFlatColorCount];
  }
  else
  {
    // create a clone of the current light grid
    pLightGridInfo->FromLightGrid(pGrid);
  }

  return true;
}
void VTextureWeightmapChannelResource::DetailTextureProperties_t::ChunkFileExchange(VChunkFile &file)
{
  char szFilename[FS_MAX_PATH];
  int iVersion = 7;

  if (file.IsLoading())
  {
    int iDummy;
    file.ReadInt(iVersion); VASSERT(iVersion>=0 && iVersion<=7);
    file.ReadInt(m_iTextureID);
        
    if (iVersion>=5)
      file.ReadShort(m_iMaterialID); // version 5

    if (iVersion<=2)
    {
      file.ReadInt(iDummy);//m_iResX
      file.ReadInt(iDummy);//m_iResY
    } else 
    {
      // version 3
      file.ReadFloat(m_fBakePriority);
    }

    if (iVersion>=4)
      file.Readbool(m_bUseClamping);
    if (iVersion>=7)
      file.Readbool(m_bHidden);

    if (iVersion>=2)
      file.Read(&m_vTilingAndOfs,sizeof(hkvVec4),"ffff");
    else
    {
      file.Read(&m_vTilingAndOfs,sizeof(hkvVec2),"ff");
      m_vTilingAndOfs.z = 0.f; m_vTilingAndOfs.w = 0.f;
    }

    if (iVersion>=6)
      file.Readbool(m_bUseThreeWayMapping);

    file.ReadString(szFilename,FS_MAX_PATH);
    if (szFilename[0])
      m_spDiffuseTexture = Vision::TextureManager.Load2DTexture(szFilename, VTM_FLAG_DEFAULT_MIPMAPPED|VTM_FLAG_ASSUME_SRGB);
    if (iVersion>=1)
    {
      file.ReadString(szFilename,FS_MAX_PATH);
      if (szFilename[0])
        m_spNormalmapTexture = Vision::TextureManager.Load2DTexture(szFilename);
      file.ReadString(szFilename,FS_MAX_PATH);
      if (szFilename[0])
        m_spSpecularTexture = Vision::TextureManager.Load2DTexture(szFilename);
    }
  } else
  {
    file.WriteInt(iVersion);
    file.WriteInt(m_iTextureID);
    file.WriteShort(m_iMaterialID); // version 5
    file.WriteFloat(m_fBakePriority); // version 3
    file.Writebool(m_bUseClamping); // version 4
    file.Writebool(m_bHidden); // version 7
    file.Write(&m_vTilingAndOfs,sizeof(hkvVec4),"ffff"); // 4 floats: version 2
    file.Writebool(m_bUseThreeWayMapping);
    if (m_spDiffuseTexture)
      file.WriteString(m_spDiffuseTexture->GetFilename());
    else
      file.WriteString(NULL);
    if (m_spNormalmapTexture)
      file.WriteString(m_spNormalmapTexture->GetFilename());
    else
      file.WriteString(NULL);
    if (m_spSpecularTexture)
      file.WriteString(m_spSpecularTexture->GetFilename());
    else
      file.WriteString(NULL);
  }
}