From 368dac5e4b1cae13c1487015227b93f724b4e6f4 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Sat, 17 Feb 2024 11:24:56 +0100 Subject: [PATCH] Simplify splatmap data management #1739 --- .../Tools/Terrain/PaintTerrainGizmoMode.cs | 30 +++++-------------- 1 file changed, 7 insertions(+), 23 deletions(-) diff --git a/Source/Editor/Tools/Terrain/PaintTerrainGizmoMode.cs b/Source/Editor/Tools/Terrain/PaintTerrainGizmoMode.cs index 05aaa48b5..4e7925dd9 100644 --- a/Source/Editor/Tools/Terrain/PaintTerrainGizmoMode.cs +++ b/Source/Editor/Tools/Terrain/PaintTerrainGizmoMode.cs @@ -36,35 +36,26 @@ namespace FlaxEditor.Tools.Terrain "Layer 7", }; - private class SplatmapData + private struct SplatmapData { - public IntPtr DataPtr { get; set; } = IntPtr.Zero; - public int Size { get; set; } = 0; - - public SplatmapData(int size) - { - EnsureCapacity(size); - } + public IntPtr DataPtr; + public int Size; public void EnsureCapacity(int size) { if (Size < size) { if (DataPtr != IntPtr.Zero) - { Marshal.FreeHGlobal(DataPtr); - } DataPtr = Marshal.AllocHGlobal(size); Size = size; } } - /// public void Free() { if (DataPtr == IntPtr.Zero) return; - Marshal.FreeHGlobal(DataPtr); DataPtr = IntPtr.Zero; Size = 0; @@ -72,7 +63,7 @@ namespace FlaxEditor.Tools.Terrain } private EditTerrainMapAction _activeAction; - private List _cachedSplatmapData = new(); + private SplatmapData[] _cachedSplatmapData = new SplatmapData[2]; /// /// The terrain painting gizmo. @@ -268,14 +259,9 @@ namespace FlaxEditor.Tools.Terrain /// The allocated memory using interface. public IntPtr GetSplatmapTempBuffer(int size, int splatmapIndex) { - if (_cachedSplatmapData.Count <= splatmapIndex) - { - _cachedSplatmapData.Add(new SplatmapData(size)); - return _cachedSplatmapData[splatmapIndex].DataPtr; - } - - _cachedSplatmapData[splatmapIndex].EnsureCapacity(size); - return _cachedSplatmapData[splatmapIndex].DataPtr; + ref var splatmapData = ref _cachedSplatmapData[splatmapIndex]; + splatmapData.EnsureCapacity(size); + return splatmapData.DataPtr; } /// @@ -309,9 +295,7 @@ namespace FlaxEditor.Tools.Terrain // Free temporary memory buffer foreach (var splatmapData in _cachedSplatmapData) - { splatmapData.Free(); - } } ///