Blender V5.0
blender::ed::transform::SnapCache_EditMesh Struct Reference

Inherits blender::ed::transform::SnapObjectContext::SnapCache.

Public Member Functions

bool has_mesh_updated (const Mesh *mesh)
void clear ()
 ~SnapCache_EditMesh () override
Public Member Functions inherited from blender::ed::transform::SnapObjectContext::SnapCache
virtual ~SnapCache ()=default

Public Attributes

Meshmesh
const Meshmesh_ref
bke::MeshRuntimeruntime_ref
bke::EditMeshDataedit_data_ref

Detailed Description

Edit mesh snap cache.

Note
It's important there is only ever one object per SnapObjectContext that references this snap cache.

Otherwise freed memory access may occur:

  • While the lookup uses the original object data, change-detection uses the evaluated object.
  • A change causes the previously cached mesh (#SnapCache_EditMesh::mesh) to be freed.
  • The cached mesh may be referenced by a snap "hit", so freeing it may crash when that mesh is later later accessed.

Furthermore, constantly re-creating cache is inefficient.

Resolve by only using this cache for objects in edit-mode, instead objects with edit-mode data. This works because only one objects-data may be in edit-mode at a time. See: #148788.

Definition at line 58 of file transform_snap_object_editmesh.cc.

Constructor & Destructor Documentation

◆ ~SnapCache_EditMesh()

blender::ed::transform::SnapCache_EditMesh::~SnapCache_EditMesh ( )
inlineoverride

Definition at line 86 of file transform_snap_object_editmesh.cc.

References clear().

Member Function Documentation

◆ clear()

void blender::ed::transform::SnapCache_EditMesh::clear ( )
inline

◆ has_mesh_updated()

bool blender::ed::transform::SnapCache_EditMesh::has_mesh_updated ( const Mesh * mesh)
inline

Member Data Documentation

◆ edit_data_ref

bke::EditMeshData* blender::ed::transform::SnapCache_EditMesh::edit_data_ref

◆ mesh

Mesh* blender::ed::transform::SnapCache_EditMesh::mesh

◆ mesh_ref

const Mesh* blender::ed::transform::SnapCache_EditMesh::mesh_ref

◆ runtime_ref

bke::MeshRuntime* blender::ed::transform::SnapCache_EditMesh::runtime_ref

The documentation for this struct was generated from the following file: