Terrain * TerrainLattice::LoadTerrain(int index) { int indexX, indexY; Terrain *pTerrain = NULL; if(GetXYFromTileID(index, &indexX, &indexY)) { pTerrain = m_pLoader->LoadTerrainAt( NULL, indexX, indexY, m_useGeoMipmap); pair<TerrainTileCacheMap_type::iterator, bool> res = m_pCachedTerrains.insert(pair<int, TerrainTileCacheItem>(index, TerrainTileCacheItem(pTerrain))); if(res.second ==false) { /// replace the old object, if the terrain already exist OUTPUT_LOG("replacing old tile, this is really unexpected\n"); SAFE_DELETE((*(res.first)).second.pTerrain); (*(res.first)).second.pTerrain = pTerrain; } if(pTerrain) { pTerrain->OnLoad(); //GeoMipmapCode if(m_useGeoMipmap) { pTerrain->SetSharedIB(m_pIndices); pTerrain->SetSharedIndexInfoGroup(&m_geoMipmapIndices); } } } return pTerrain; }