From f6819fe26e6c5abd00bebc45f14fc679fa5cc259 Mon Sep 17 00:00:00 2001 From: mano-wii Date: Tue, 1 Jan 2019 13:59:23 -0200 Subject: mesh_snap_utilities_line: fix ram and vram leakage --- mesh_snap_utilities_line/snap_context_l/__init__.py | 4 ++++ mesh_snap_utilities_line/snap_context_l/mesh_drawing.py | 16 +++++++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) (limited to 'mesh_snap_utilities_line/snap_context_l') diff --git a/mesh_snap_utilities_line/snap_context_l/__init__.py b/mesh_snap_utilities_line/snap_context_l/__init__.py index 86e2f19c..0cf5ad62 100644 --- a/mesh_snap_utilities_line/snap_context_l/__init__.py +++ b/mesh_snap_utilities_line/snap_context_l/__init__.py @@ -288,6 +288,8 @@ class SnapContext(): self._offscreen.free() # Some objects may still be being referenced for snap_obj in self.snap_objects: + if len(snap_obj.data) == 2: + snap_obj.data[1].free() del snap_obj.data del snap_obj.mat del snap_obj @@ -306,6 +308,7 @@ class SnapContext(): def tag_update_drawn_snap_object(self, snap_obj): if len(snap_obj.data) > 1: + snap_obj.data[1].free() del snap_obj.data[1:] #self.update_all() # Update on next snap_get call # @@ -319,6 +322,7 @@ class SnapContext(): snap_vert = self._snap_mode & VERT != 0 snap_edge = self._snap_mode & EDGE != 0 snap_face = self._snap_mode & FACE != 0 + snap_obj.data[1].free() snap_obj.data[1] = GPU_Indices_Mesh(snap_obj.data[0], snap_face, snap_edge, snap_vert) _Internal.gpu_Indices_restore_state() diff --git a/mesh_snap_utilities_line/snap_context_l/mesh_drawing.py b/mesh_snap_utilities_line/snap_context_l/mesh_drawing.py index 76b9a1d4..b8e61799 100644 --- a/mesh_snap_utilities_line/snap_context_l/mesh_drawing.py +++ b/mesh_snap_utilities_line/snap_context_l/mesh_drawing.py @@ -386,12 +386,18 @@ class GPU_Indices_Mesh(): def get_loosevert_index(self, index): return self.looseverts[index] - - def __del__(self): + def free(self): if len(self.users) == 1: - GPU_Indices_Mesh._Hash.pop(obj.data) - - self.user.remove(self) + GPU_Indices_Mesh._Hash.pop(self.obj.data) + del self.batch_tris + del self.batch_edges + del self.batch_lverts + del self.verts_co + del self.tri_verts + del self.edge_verts + del self.looseverts + + self.users.remove(self) #print('mesh_del', self.obj.name) -- cgit v1.2.3