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.
///