From a19d9b546ed0e1edf72a59e4a0da91a7f6688df3 Mon Sep 17 00:00:00 2001 From: Nico de Poel Date: Sun, 18 Apr 2021 01:04:00 +0200 Subject: [PATCH] Added disposal code for alias models --- Assets/Scripts/Modules/AliasModel.cs | 10 ++++++++++ Assets/Scripts/Modules/RenderModule.cs | 17 ++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/Assets/Scripts/Modules/AliasModel.cs b/Assets/Scripts/Modules/AliasModel.cs index 00a80c4..544613b 100644 --- a/Assets/Scripts/Modules/AliasModel.cs +++ b/Assets/Scripts/Modules/AliasModel.cs @@ -59,6 +59,16 @@ public class AliasModel return false; // Shouldn't happen } + public void Dispose() + { + foreach (var mesh in animationMeshes) + { + UnityEngine.Object.Destroy(mesh.Item2); + } + + animationMeshes.Clear(); + } + public void ImportMeshData(QAliasHeader header, QTriVertex[][] poseVertices, QTriangle[] triangles, QSTVert[] stVertices) { // Massage the input data for easier conversion diff --git a/Assets/Scripts/Modules/RenderModule.cs b/Assets/Scripts/Modules/RenderModule.cs index 3d758d5..1863a48 100644 --- a/Assets/Scripts/Modules/RenderModule.cs +++ b/Assets/Scripts/Modules/RenderModule.cs @@ -1,9 +1,11 @@ -using UnityEngine; +using System.Collections.Generic; +using UnityEngine; using UnityEngine.Rendering; public partial class RenderModule { private readonly UniQuake uq; + private readonly List aliasModels = new List(); public RenderModule(UniQuake uniQuake) { @@ -11,6 +13,18 @@ public partial class RenderModule BuildCallbacks(); } + public override void Destroy() + { + base.Destroy(); + + foreach (var aliasModel in aliasModels) + { + // aliasModel.Dispose(); // TODO: reactivate when done testing in editor + } + + aliasModels.Clear(); + } + private float xPos = -8f; private int UploadAliasModel(string name, QAliasHeader header, @@ -21,6 +35,7 @@ public partial class RenderModule string modelName = System.IO.Path.GetFileNameWithoutExtension(name); AliasModel aliasModel = new AliasModel(modelName); aliasModel.ImportMeshData(header, poseVertices, triangles, stVertices); + aliasModels.Add(aliasModel); var go = new GameObject(modelName); go.transform.SetPositionAndRotation(new Vector3(xPos, 0, 0), Quaternion.Euler(-90, 90, 0));