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 c188425ccbcf29a4da96ee46209f9d27519fc77a..2f4e44bc213a6baecc559c653391d90f486f2863 100644 --- a/mesh_snap_utilities_line/snap_context_l/mesh_drawing.py +++ b/mesh_snap_utilities_line/snap_context_l/mesh_drawing.py @@ -113,12 +113,11 @@ def get_bmesh_loosevert_array(bm): class _Mesh_Arrays: - def __init__(self, obj, create_tris, create_edges, create_looseverts): + def __init__(self, depsgraph, obj, create_tris, create_edges, create_looseverts): self.tri_verts = self.edge_verts = self.looseverts = () if obj.type == "MESH": - me = obj.data - if me.is_editmode: - bm = bmesh.from_edit_mesh(me) + if obj.data.is_editmode: + bm = bmesh.from_edit_mesh(obj.data) bm.verts.ensure_lookup_table() self.verts_co = get_bmesh_vert_co_array(bm) @@ -129,11 +128,9 @@ class _Mesh_Arrays: self.edge_verts = get_bmesh_edge_verts_array(bm) if create_looseverts: self.looseverts = get_bmesh_loosevert_array(bm) - - del bm else: - import bpy - + ob_eval = obj.evaluated_get(depsgraph) + me = ob_eval.data self.verts_co = get_mesh_vert_co_array(me) if create_tris: @@ -175,21 +172,20 @@ class GPU_Indices_Mesh: "users", ) - _Hash = {} + _cache = {} shader = None UBO_data = None UBO = None @classmethod - def end_opengl(cls): + def gpu_data_free(cls): del cls.shader del cls.UBO del cls.UBO_data - - del cls + cls.shader = cls.UBO = cls.UBO_data = None @staticmethod - def init_opengl(): + def gpu_data_ensure(): cls = GPU_Indices_Mesh # OpenGL was already initialized, nothing to do here. if cls.shader is not None: @@ -198,8 +194,8 @@ class GPU_Indices_Mesh: import atexit # Make sure we only registered the callback once. - atexit.unregister(cls.end_opengl) - atexit.register(cls.end_opengl) + atexit.unregister(cls.gpu_data_free) + atexit.register(cls.gpu_data_free) shader_info = gpu.types.GPUShaderCreateInfo() @@ -278,8 +274,8 @@ class GPU_Indices_Mesh: def __init__(self, depsgraph, obj, draw_tris, draw_edges, draw_verts): self.ob_data = obj.original.data - if self.ob_data in GPU_Indices_Mesh._Hash: - src = GPU_Indices_Mesh._Hash[self.ob_data] + if self.ob_data in GPU_Indices_Mesh._cache: + src = GPU_Indices_Mesh._cache[self.ob_data] dst = self dst.draw_tris = src.draw_tris @@ -296,10 +292,10 @@ class GPU_Indices_Mesh: dst.users.append(self) update = False - else: - GPU_Indices_Mesh._Hash[self.ob_data] = self + GPU_Indices_Mesh._cache[self.ob_data] = self self.users = [self] + update = True if update: @@ -307,12 +303,10 @@ class GPU_Indices_Mesh: self.draw_edges = draw_edges self.draw_verts = draw_verts - GPU_Indices_Mesh.init_opengl() + GPU_Indices_Mesh.gpu_data_ensure() ## Init Array ## - mesh_arrays = _Mesh_Arrays( - depsgraph.id_eval_get(obj), draw_tris, draw_edges, draw_verts - ) + mesh_arrays = _Mesh_Arrays(depsgraph, obj, draw_tris, draw_edges, draw_verts) if mesh_arrays.verts_co is None: self.draw_tris = False @@ -477,13 +471,13 @@ class GPU_Indices_Mesh: del self.tri_verts del self.edge_verts del self.looseverts - GPU_Indices_Mesh._Hash.pop(self.ob_data) + GPU_Indices_Mesh._cache.pop(self.ob_data) # print('mesh_del', self.obj.name) def gpu_Indices_enable_state(winmat, viewmat): - GPU_Indices_Mesh.init_opengl() + GPU_Indices_Mesh.gpu_data_ensure() gpu.matrix.push() gpu.matrix.push_projection() gpu.matrix.load_projection_matrix(winmat) @@ -497,7 +491,7 @@ def gpu_Indices_restore_state(): def gpu_Indices_use_clip_planes(rv3d, value): - GPU_Indices_Mesh.init_opengl() + GPU_Indices_Mesh.gpu_data_ensure() if value and rv3d.use_clip_planes: GPU_Indices_Mesh.UBO_data.use_clip_planes = True GPU_Indices_Mesh.UBO_data.WorldClipPlanes[0] = rv3d.clip_planes[0][:] @@ -511,4 +505,4 @@ def gpu_Indices_use_clip_planes(rv3d, value): def gpu_Indices_mesh_cache_clear(): - GPU_Indices_Mesh._Hash.clear() + GPU_Indices_Mesh._cache.clear()