/// 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; }
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; }