diff --git a/Source/Engine/Terrain/TerrainPatch.cpp b/Source/Engine/Terrain/TerrainPatch.cpp index d98827ce1..92a8c09d3 100644 --- a/Source/Engine/Terrain/TerrainPatch.cpp +++ b/Source/Engine/Terrain/TerrainPatch.cpp @@ -1125,42 +1125,67 @@ bool TerrainPatch::InitializeHeightMap() float* TerrainPatch::GetHeightmapData() { + PROFILE_CPU_NAMED("Terrain.GetHeightmapData"); + if (_cachedHeightMap.HasItems()) return _cachedHeightMap.Get(); - PROFILE_CPU_NAMED("Terrain.GetHeightmapData"); - CacheHeightData(); return _cachedHeightMap.Get(); } +void TerrainPatch::ClearHeightmapCache() +{ + PROFILE_CPU_NAMED("Terrain.ClearHeightmapCache"); + _cachedHeightMap.Clear(); +} + byte* TerrainPatch::GetHolesMaskData() { + PROFILE_CPU_NAMED("Terrain.GetHolesMaskData"); + if (_cachedHolesMask.HasItems()) return _cachedHolesMask.Get(); - PROFILE_CPU_NAMED("Terrain.GetHolesMaskData"); - CacheHeightData(); return _cachedHolesMask.Get(); } +void TerrainPatch::ClearHolesMaskCache() +{ + PROFILE_CPU_NAMED("Terrain.ClearHolesMaskCache"); + _cachedHolesMask.Clear(); +} + Color32* TerrainPatch::GetSplatMapData(int32 index) { ASSERT(index >= 0 && index < TERRAIN_MAX_SPLATMAPS_COUNT); + PROFILE_CPU_NAMED("Terrain.GetSplatMapData"); + if (_cachedSplatMap[index].HasItems()) return _cachedSplatMap[index].Get(); - PROFILE_CPU_NAMED("Terrain.GetSplatMapData"); - CacheSplatData(); return _cachedSplatMap[index].Get(); } +void TerrainPatch::ClearSplatMapCache() +{ + PROFILE_CPU_NAMED("Terrain.ClearSplatMapCache"); + _cachedSplatMap->Clear(); +} + +void TerrainPatch::ClearCache() +{ + ClearHeightmapCache(); + ClearHolesMaskCache(); + ClearSplatMapCache(); +} + void TerrainPatch::CacheHeightData() { PROFILE_CPU_NAMED("Terrain.CacheHeightData"); diff --git a/Source/Engine/Terrain/TerrainPatch.h b/Source/Engine/Terrain/TerrainPatch.h index 44a768f90..689c629c5 100644 --- a/Source/Engine/Terrain/TerrainPatch.h +++ b/Source/Engine/Terrain/TerrainPatch.h @@ -229,12 +229,22 @@ public: /// The heightmap data. float* GetHeightmapData(); + /// + /// Clears cache of the heightmap data. + /// + void ClearHeightmapCache(); + /// /// Gets the raw pointer to the holes mask data. /// /// The holes mask data. byte* GetHolesMaskData(); + /// + /// Clears cache of the holes mask data. + /// + void ClearHolesMaskCache(); + /// /// Gets the raw pointer to the splat map data. /// @@ -242,6 +252,16 @@ public: /// The splat map data. Color32* GetSplatMapData(int32 index); + /// + /// Clears cache of the splat map data. + /// + void ClearSplatMapCache(); + + /// + /// Clears all caches. + /// + void ClearCache(); + /// /// Modifies the terrain patch heightmap with the given samples. ///