Blender  V2.93
Classes | Macros | Functions | Variables
DerivedMesh.cc File Reference
#include <climits>
#include <cstring>
#include "MEM_guardedalloc.h"
#include "DNA_cloth_types.h"
#include "DNA_customdata_types.h"
#include "DNA_key_types.h"
#include "DNA_material_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "BLI_array.h"
#include "BLI_bitmap.h"
#include "BLI_blenlib.h"
#include "BLI_float2.hh"
#include "BLI_linklist.h"
#include "BLI_math.h"
#include "BLI_task.h"
#include "BLI_utildefines.h"
#include "BLI_vector.hh"
#include "BKE_DerivedMesh.h"
#include "BKE_bvhutils.h"
#include "BKE_colorband.h"
#include "BKE_deform.h"
#include "BKE_editmesh.h"
#include "BKE_geometry_set.hh"
#include "BKE_geometry_set_instances.hh"
#include "BKE_key.h"
#include "BKE_layer.h"
#include "BKE_lib_id.h"
#include "BKE_material.h"
#include "BKE_mesh.h"
#include "BKE_mesh_iterators.h"
#include "BKE_mesh_mapping.h"
#include "BKE_mesh_runtime.h"
#include "BKE_mesh_tangent.h"
#include "BKE_mesh_wrapper.h"
#include "BKE_modifier.h"
#include "BKE_multires.h"
#include "BKE_object.h"
#include "BKE_object_deform.h"
#include "BKE_paint.h"
#include "BLI_sys_types.h"
#include "BKE_shrinkwrap.h"
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_query.h"
#include "CLG_log.h"
#include "BLI_dynstr.h"

Go to the source code of this file.

Classes

struct  MappedUserData
 

Macros

#define ASSERT_IS_VALID_MESH(mesh)
 

Functions

static void mesh_init_origspace (Mesh *mesh)
 
static void editbmesh_calc_modifier_final_normals (Mesh *mesh_final, const CustomData_MeshMasks *final_datamask)
 
static MVertdm_getVertArray (DerivedMesh *dm)
 
static MEdgedm_getEdgeArray (DerivedMesh *dm)
 
static MFacedm_getTessFaceArray (DerivedMesh *dm)
 
static MLoopdm_getLoopArray (DerivedMesh *dm)
 
static MPolydm_getPolyArray (DerivedMesh *dm)
 
static MVertdm_dupVertArray (DerivedMesh *dm)
 
static MEdgedm_dupEdgeArray (DerivedMesh *dm)
 
static MFacedm_dupFaceArray (DerivedMesh *dm)
 
static MLoopdm_dupLoopArray (DerivedMesh *dm)
 
static MPolydm_dupPolyArray (DerivedMesh *dm)
 
static int dm_getNumLoopTri (DerivedMesh *dm)
 
static const MLoopTridm_getLoopTriArray (DerivedMesh *dm)
 
static CustomDatadm_getVertCData (DerivedMesh *dm)
 
static CustomDatadm_getEdgeCData (DerivedMesh *dm)
 
static CustomDatadm_getTessFaceCData (DerivedMesh *dm)
 
static CustomDatadm_getLoopCData (DerivedMesh *dm)
 
static CustomDatadm_getPolyCData (DerivedMesh *dm)
 
void DM_init_funcs (DerivedMesh *dm)
 
void DM_init (DerivedMesh *dm, DerivedMeshType type, int numVerts, int numEdges, int numTessFaces, int numLoops, int numPolys)
 
void DM_from_template_ex (DerivedMesh *dm, DerivedMesh *source, DerivedMeshType type, int numVerts, int numEdges, int numTessFaces, int numLoops, int numPolys, const CustomData_MeshMasks *mask)
 
void DM_from_template (DerivedMesh *dm, DerivedMesh *source, DerivedMeshType type, int numVerts, int numEdges, int numTessFaces, int numLoops, int numPolys)
 
bool DM_release (DerivedMesh *dm)
 
void DM_DupPolys (DerivedMesh *source, DerivedMesh *target)
 
void DM_ensure_normals (DerivedMesh *dm)
 
void DM_ensure_looptri_data (DerivedMesh *dm)
 
void BKE_mesh_runtime_eval_to_meshkey (Mesh *me_deformed, Mesh *me, KeyBlock *kb)
 
void DM_set_only_copy (DerivedMesh *dm, const CustomData_MeshMasks *mask)
 
static void mesh_set_only_copy (Mesh *mesh, const CustomData_MeshMasks *mask)
 
void DM_add_vert_layer (DerivedMesh *dm, int type, eCDAllocType alloctype, void *layer)
 
void DM_add_edge_layer (DerivedMesh *dm, int type, eCDAllocType alloctype, void *layer)
 
void DM_add_tessface_layer (DerivedMesh *dm, int type, eCDAllocType alloctype, void *layer)
 
void DM_add_loop_layer (DerivedMesh *dm, int type, eCDAllocType alloctype, void *layer)
 
void DM_add_poly_layer (DerivedMesh *dm, int type, eCDAllocType alloctype, void *layer)
 
void * DM_get_vert_data (DerivedMesh *dm, int index, int type)
 
void * DM_get_edge_data (DerivedMesh *dm, int index, int type)
 
void * DM_get_tessface_data (DerivedMesh *dm, int index, int type)
 
void * DM_get_poly_data (DerivedMesh *dm, int index, int type)
 
void * DM_get_vert_data_layer (DerivedMesh *dm, int type)
 
void * DM_get_edge_data_layer (DerivedMesh *dm, int type)
 
void * DM_get_tessface_data_layer (DerivedMesh *dm, int type)
 
void * DM_get_poly_data_layer (DerivedMesh *dm, int type)
 
void * DM_get_loop_data_layer (DerivedMesh *dm, int type)
 
void DM_copy_vert_data (DerivedMesh *source, DerivedMesh *dest, int source_index, int dest_index, int count)
 
void DM_interp_vert_data (DerivedMesh *source, DerivedMesh *dest, int *src_indices, float *weights, int count, int dest_index)
 
static float(* get_editbmesh_orco_verts (BMEditMesh *em))[3]
 
static float(* get_orco_coords (Object *ob, BMEditMesh *em, int layer, int *free))[3]
 
static Meshcreate_orco_mesh (Object *ob, Mesh *me, BMEditMesh *em, int layer)
 
static void add_orco_mesh (Object *ob, BMEditMesh *em, Mesh *mesh, Mesh *mesh_orco, int layer)
 
static void mesh_calc_modifier_final_normals (const Mesh *mesh_input, const CustomData_MeshMasks *final_datamask, const bool sculpt_dyntopo, Mesh *mesh_final)
 
static void mesh_calc_finalize (const Mesh *mesh_input, Mesh *mesh_eval)
 
void BKE_mesh_wrapper_deferred_finalize (Mesh *me_eval, const CustomData_MeshMasks *cd_mask_finalize)
 
static Meshprepare_geometry_set_for_mesh_modifier (Mesh *mesh, GeometrySet &r_geometry_set)
 
static Meshmodifier_modify_mesh_and_geometry_set (ModifierData *md, const ModifierEvalContext &mectx, Mesh *input_mesh, GeometrySet &geometry_set)
 
static void mesh_calc_modifiers (struct Depsgraph *depsgraph, Scene *scene, Object *ob, int useDeform, const bool need_mapping, const CustomData_MeshMasks *dataMask, const int index, const bool use_cache, const bool allow_shared_mesh, Mesh **r_deform, Mesh **r_final, GeometrySet **r_geometry_set)
 
float(* editbmesh_vert_coords_alloc (BMEditMesh *em, int *r_vert_len))[3]
 
bool editbmesh_modifier_is_enabled (Scene *scene, const Object *ob, ModifierData *md, bool has_prev_mesh)
 
static void editbmesh_calc_modifiers (struct Depsgraph *depsgraph, Scene *scene, Object *ob, BMEditMesh *em_input, const CustomData_MeshMasks *dataMask, Mesh **r_cage, Mesh **r_final, GeometrySet **r_geometry_set)
 
static void mesh_build_extra_data (struct Depsgraph *depsgraph, Object *ob, Mesh *mesh_eval)
 
static void mesh_runtime_check_normals_valid (const Mesh *mesh)
 
static void mesh_build_data (struct Depsgraph *depsgraph, Scene *scene, Object *ob, const CustomData_MeshMasks *dataMask, const bool need_mapping)
 
static void editbmesh_build_data (struct Depsgraph *depsgraph, Scene *scene, Object *obedit, BMEditMesh *em, CustomData_MeshMasks *dataMask)
 
static void object_get_datamask (const Depsgraph *depsgraph, Object *ob, CustomData_MeshMasks *r_mask, bool *r_need_mapping)
 
void makeDerivedMesh (struct Depsgraph *depsgraph, Scene *scene, Object *ob, BMEditMesh *em, const CustomData_MeshMasks *dataMask)
 
Meshmesh_get_eval_final (struct Depsgraph *depsgraph, Scene *scene, Object *ob, const CustomData_MeshMasks *dataMask)
 
Meshmesh_get_eval_deform (struct Depsgraph *depsgraph, Scene *scene, Object *ob, const CustomData_MeshMasks *dataMask)
 
Meshmesh_create_eval_final (Depsgraph *depsgraph, Scene *scene, Object *ob, const CustomData_MeshMasks *dataMask)
 
Meshmesh_create_eval_final_index_render (Depsgraph *depsgraph, Scene *scene, Object *ob, const CustomData_MeshMasks *dataMask, int index)
 
Meshmesh_create_eval_no_deform (Depsgraph *depsgraph, Scene *scene, Object *ob, const CustomData_MeshMasks *dataMask)
 
Meshmesh_create_eval_no_deform_render (Depsgraph *depsgraph, Scene *scene, Object *ob, const CustomData_MeshMasks *dataMask)
 
Mesheditbmesh_get_eval_cage_and_final (Depsgraph *depsgraph, Scene *scene, Object *obedit, BMEditMesh *em, const CustomData_MeshMasks *dataMask, Mesh **r_final)
 
Mesheditbmesh_get_eval_cage (struct Depsgraph *depsgraph, Scene *scene, Object *obedit, BMEditMesh *em, const CustomData_MeshMasks *dataMask)
 
Mesheditbmesh_get_eval_cage_from_orig (struct Depsgraph *depsgraph, Scene *scene, Object *obedit, const CustomData_MeshMasks *dataMask)
 
static void make_vertexcos__mapFunc (void *userData, int index, const float co[3], const float UNUSED(no_f[3]), const short UNUSED(no_s[3]))
 
void mesh_get_mapped_verts_coords (Mesh *me_eval, float(*r_cos)[3], const int totcos)
 
void DM_calc_loop_tangents (DerivedMesh *dm, bool calc_active_tangent, const char(*tangent_names)[MAX_NAME], int tangent_names_len)
 
static void dm_debug_info_layers (DynStr *dynstr, DerivedMesh *dm, CustomData *cd, void *(*getElemDataArray)(DerivedMesh *, int))
 
char * DM_debug_info (DerivedMesh *dm)
 
void DM_debug_print (DerivedMesh *dm)
 
bool DM_is_valid (DerivedMesh *dm)
 

Variables

static ThreadRWMutex loops_cache_lock = PTHREAD_RWLOCK_INITIALIZER
 

Macro Definition Documentation

◆ ASSERT_IS_VALID_MESH

#define ASSERT_IS_VALID_MESH (   mesh)

Definition at line 90 of file DerivedMesh.cc.

Function Documentation

◆ add_orco_mesh()

static void add_orco_mesh ( Object ob,
BMEditMesh em,
Mesh mesh,
Mesh mesh_orco,
int  layer 
)
static

◆ BKE_mesh_runtime_eval_to_meshkey()

void BKE_mesh_runtime_eval_to_meshkey ( Mesh me_deformed,
Mesh me,
KeyBlock kb 
)

Utility function to convert an (evaluated) Mesh to a shape key block.

Definition at line 524 of file DerivedMesh.cc.

References BKE_keyblock_convert_from_mesh(), Mesh::key, and Mesh::totvert.

Referenced by ED_mesh_shapes_join_objects_exec().

◆ BKE_mesh_wrapper_deferred_finalize()

void BKE_mesh_wrapper_deferred_finalize ( Mesh me_eval,
const CustomData_MeshMasks cd_mask_finalize 
)

◆ create_orco_mesh()

static Mesh* create_orco_mesh ( Object ob,
Mesh me,
BMEditMesh em,
int  layer 
)
static

◆ DM_add_edge_layer()

void DM_add_edge_layer ( DerivedMesh dm,
int  type,
eCDAllocType  alloctype,
void *  layer 
)

◆ DM_add_loop_layer()

void DM_add_loop_layer ( DerivedMesh dm,
int  type,
eCDAllocType  alloctype,
void *  layer 
)

◆ DM_add_poly_layer()

void DM_add_poly_layer ( DerivedMesh dm,
int  type,
eCDAllocType  alloctype,
void *  layer 
)

◆ DM_add_tessface_layer()

void DM_add_tessface_layer ( DerivedMesh dm,
int  type,
eCDAllocType  alloctype,
void *  layer 
)

◆ DM_add_vert_layer()

void DM_add_vert_layer ( DerivedMesh dm,
int  type,
eCDAllocType  alloctype,
void *  layer 
)

◆ DM_calc_loop_tangents()

void DM_calc_loop_tangents ( DerivedMesh dm,
bool  calc_active_tangent,
const char(*)  tangent_names[MAX_NAME],
int  tangent_names_len 
)

◆ DM_copy_vert_data()

void DM_copy_vert_data ( DerivedMesh source,
DerivedMesh dest,
int  source_index,
int  dest_index,
int  count 
)

Definition at line 654 of file DerivedMesh.cc.

References count, CustomData_copy_data(), and DerivedMesh::vertData.

Referenced by set_ccgdm_all_geometry().

◆ DM_debug_info()

char* DM_debug_info ( DerivedMesh dm)

◆ dm_debug_info_layers()

static void dm_debug_info_layers ( DynStr dynstr,
DerivedMesh dm,
CustomData cd,
void *(*)(DerivedMesh *, int)  getElemDataArray 
)
static

◆ DM_debug_print()

void DM_debug_print ( DerivedMesh dm)

Definition at line 2496 of file DerivedMesh.cc.

References DM_debug_info(), MEM_freeN, and str.

◆ dm_dupEdgeArray()

static MEdge* dm_dupEdgeArray ( DerivedMesh dm)
static

Definition at line 193 of file DerivedMesh.cc.

References DerivedMesh::copyEdgeArray, DerivedMesh::getNumEdges, and MEM_malloc_arrayN.

Referenced by DM_init_funcs().

◆ dm_dupFaceArray()

static MFace* dm_dupFaceArray ( DerivedMesh dm)
static

◆ dm_dupLoopArray()

static MLoop* dm_dupLoopArray ( DerivedMesh dm)
static

Definition at line 217 of file DerivedMesh.cc.

References DerivedMesh::copyLoopArray, DerivedMesh::getNumLoops, and MEM_malloc_arrayN.

Referenced by DM_init_funcs().

◆ dm_dupPolyArray()

static MPoly* dm_dupPolyArray ( DerivedMesh dm)
static

Definition at line 229 of file DerivedMesh.cc.

References DerivedMesh::copyPolyArray, DerivedMesh::getNumPolys, and MEM_malloc_arrayN.

Referenced by DM_init_funcs().

◆ DM_DupPolys()

void DM_DupPolys ( DerivedMesh source,
DerivedMesh target 
)

◆ dm_dupVertArray()

static MVert* dm_dupVertArray ( DerivedMesh dm)
static

Definition at line 181 of file DerivedMesh.cc.

References DerivedMesh::copyVertArray, DerivedMesh::getNumVerts, and MEM_malloc_arrayN.

Referenced by DM_init_funcs().

◆ DM_ensure_looptri_data()

void DM_ensure_looptri_data ( DerivedMesh dm)

Ensure the array is large enough

Note
This function must always be thread-protected by caller. It should only be used by internal code.

Definition at line 493 of file DerivedMesh.cc.

References DerivedMesh::array, DerivedMesh::array_wip, BLI_assert, DerivedMesh::looptris, MEM_malloc_arrayN, MEM_SAFE_FREE, DerivedMesh::num, DerivedMesh::num_alloc, DerivedMesh::numLoopData, DerivedMesh::numPolyData, poly_to_tri_count(), and SWAP.

Referenced by ccgDM_recalcLoopTri(), and cdDM_recalc_looptri().

◆ DM_ensure_normals()

void DM_ensure_normals ( DerivedMesh dm)

◆ DM_from_template()

void DM_from_template ( DerivedMesh dm,
DerivedMesh source,
DerivedMeshType  type,
int  numVerts,
int  numEdges,
int  numTessFaces,
int  numLoops,
int  numPolys 
)

Definition at line 404 of file DerivedMesh.cc.

References CD_MASK_DERIVEDMESH, DM_from_template_ex(), and type.

Referenced by CDDM_copy(), and getCCGDerivedMesh().

◆ DM_from_template_ex()

void DM_from_template_ex ( DerivedMesh dm,
DerivedMesh source,
DerivedMeshType  type,
int  numVerts,
int  numEdges,
int  numTessFaces,
int  numLoops,
int  numPolys,
const CustomData_MeshMasks mask 
)

◆ DM_get_edge_data()

void* DM_get_edge_data ( DerivedMesh dm,
int  index,
int  type 
)

◆ DM_get_edge_data_layer()

void* DM_get_edge_data_layer ( DerivedMesh dm,
int  type 
)

◆ DM_get_loop_data_layer()

void* DM_get_loop_data_layer ( DerivedMesh dm,
int  type 
)

Definition at line 649 of file DerivedMesh.cc.

References CustomData_get_layer(), DerivedMesh::loopData, and type.

Referenced by DM_init_funcs(), and do_multires_bake().

◆ DM_get_poly_data()

void* DM_get_poly_data ( DerivedMesh dm,
int  index,
int  type 
)

Definition at line 611 of file DerivedMesh.cc.

References BLI_assert, CustomData_get(), DerivedMesh::polyData, and type.

Referenced by ccgDM_get_poly_data(), and DM_init_funcs().

◆ DM_get_poly_data_layer()

void* DM_get_poly_data_layer ( DerivedMesh dm,
int  type 
)

◆ DM_get_tessface_data()

void* DM_get_tessface_data ( DerivedMesh dm,
int  index,
int  type 
)

◆ DM_get_tessface_data_layer()

void* DM_get_tessface_data_layer ( DerivedMesh dm,
int  type 
)

◆ DM_get_vert_data()

void* DM_get_vert_data ( DerivedMesh dm,
int  index,
int  type 
)

Definition at line 593 of file DerivedMesh.cc.

References BLI_assert, CustomData_get(), type, and DerivedMesh::vertData.

Referenced by ccgDM_get_vert_data(), cdDM_create(), and DM_init_funcs().

◆ DM_get_vert_data_layer()

void* DM_get_vert_data_layer ( DerivedMesh dm,
int  type 
)

◆ dm_getEdgeArray()

static MEdge* dm_getEdgeArray ( DerivedMesh dm)
static

◆ dm_getEdgeCData()

static CustomData* dm_getEdgeCData ( DerivedMesh dm)
static

Definition at line 277 of file DerivedMesh.cc.

References DerivedMesh::edgeData.

Referenced by DM_init_funcs().

◆ dm_getLoopArray()

static MLoop* dm_getLoopArray ( DerivedMesh dm)
static

◆ dm_getLoopCData()

static CustomData* dm_getLoopCData ( DerivedMesh dm)
static

Definition at line 287 of file DerivedMesh.cc.

References DerivedMesh::loopData.

Referenced by DM_init_funcs().

◆ dm_getLoopTriArray()

static const MLoopTri* dm_getLoopTriArray ( DerivedMesh dm)
static

◆ dm_getNumLoopTri()

static int dm_getNumLoopTri ( DerivedMesh dm)
static

◆ dm_getPolyArray()

static MPoly* dm_getPolyArray ( DerivedMesh dm)
static

◆ dm_getPolyCData()

static CustomData* dm_getPolyCData ( DerivedMesh dm)
static

Definition at line 292 of file DerivedMesh.cc.

References DerivedMesh::polyData.

Referenced by DM_init_funcs().

◆ dm_getTessFaceArray()

static MFace* dm_getTessFaceArray ( DerivedMesh dm)
static

◆ dm_getTessFaceCData()

static CustomData* dm_getTessFaceCData ( DerivedMesh dm)
static

Definition at line 282 of file DerivedMesh.cc.

References DerivedMesh::faceData.

Referenced by DM_init_funcs().

◆ dm_getVertArray()

static MVert* dm_getVertArray ( DerivedMesh dm)
static

◆ dm_getVertCData()

static CustomData* dm_getVertCData ( DerivedMesh dm)
static

Definition at line 272 of file DerivedMesh.cc.

References DerivedMesh::vertData.

Referenced by DM_init_funcs().

◆ DM_init()

void DM_init ( DerivedMesh dm,
DerivedMeshType  type,
int  numVerts,
int  numEdges,
int  numTessFaces,
int  numLoops,
int  numPolys 
)

◆ DM_init_funcs()

void DM_init_funcs ( DerivedMesh dm)

Utility function to initialize a DerivedMesh's function pointers to the default implementation (for those functions which have a default)

Definition at line 301 of file DerivedMesh.cc.

References dm_dupEdgeArray(), dm_dupFaceArray(), dm_dupLoopArray(), dm_dupPolyArray(), dm_dupVertArray(), DM_get_edge_data(), DM_get_edge_data_layer(), DM_get_loop_data_layer(), DM_get_poly_data(), DM_get_poly_data_layer(), DM_get_tessface_data(), DM_get_tessface_data_layer(), DM_get_vert_data(), DM_get_vert_data_layer(), dm_getEdgeArray(), dm_getEdgeCData(), dm_getLoopArray(), dm_getLoopCData(), dm_getLoopTriArray(), dm_getNumLoopTri(), dm_getPolyArray(), dm_getPolyCData(), dm_getTessFaceArray(), dm_getTessFaceCData(), dm_getVertArray(), dm_getVertCData(), DerivedMesh::dupEdgeArray, DerivedMesh::dupLoopArray, DerivedMesh::dupPolyArray, DerivedMesh::dupTessFaceArray, DerivedMesh::dupVertArray, DerivedMesh::getEdgeArray, DerivedMesh::getEdgeData, DerivedMesh::getEdgeDataArray, DerivedMesh::getEdgeDataLayout, DerivedMesh::getLoopArray, DerivedMesh::getLoopDataArray, DerivedMesh::getLoopDataLayout, DerivedMesh::getLoopTriArray, DerivedMesh::getNumLoopTri, DerivedMesh::getPolyArray, DerivedMesh::getPolyData, DerivedMesh::getPolyDataArray, DerivedMesh::getPolyDataLayout, DerivedMesh::getTessFaceArray, DerivedMesh::getTessFaceData, DerivedMesh::getTessFaceDataArray, DerivedMesh::getTessFaceDataLayout, DerivedMesh::getVertArray, DerivedMesh::getVertData, DerivedMesh::getVertDataArray, and DerivedMesh::getVertDataLayout.

Referenced by DM_from_template_ex(), and DM_init().

◆ DM_interp_vert_data()

void DM_interp_vert_data ( DerivedMesh source,
DerivedMesh dest,
int *  src_indices,
float weights,
int  count,
int  dest_index 
)

interpolates vertex data from the vertices indexed by src_indices in the source mesh using the given weights and stores the result in the vertex indexed by dest_index in the dest mesh

Definition at line 665 of file DerivedMesh.cc.

References count, CustomData_interp(), and DerivedMesh::vertData.

Referenced by set_ccgdm_all_geometry().

◆ DM_is_valid()

bool DM_is_valid ( DerivedMesh dm)

◆ DM_release()

bool DM_release ( DerivedMesh dm)

◆ DM_set_only_copy()

void DM_set_only_copy ( DerivedMesh dm,
const CustomData_MeshMasks mask 
)

set the CD_FLAG_NOCOPY flag in custom data layers where the mask is zero for the layer type, so only layer types specified by the mask will be copied

Definition at line 540 of file DerivedMesh.cc.

References CustomData_set_only_copy(), DerivedMesh::edgeData, DerivedMesh::faceData, DerivedMesh::loopData, mask(), DerivedMesh::polyData, and DerivedMesh::vertData.

◆ editbmesh_build_data()

static void editbmesh_build_data ( struct Depsgraph depsgraph,
Scene scene,
Object obedit,
BMEditMesh em,
CustomData_MeshMasks dataMask 
)
static

◆ editbmesh_calc_modifier_final_normals()

static void editbmesh_calc_modifier_final_normals ( Mesh mesh_final,
const CustomData_MeshMasks final_datamask 
)
static

◆ editbmesh_calc_modifiers()

static void editbmesh_calc_modifiers ( struct Depsgraph depsgraph,
Scene scene,
Object ob,
BMEditMesh em_input,
const CustomData_MeshMasks dataMask,
Mesh **  r_cage,
Mesh **  r_final,
GeometrySet **  r_geometry_set 
)
static

Definition at line 1589 of file DerivedMesh.cc.

References add_orco_mesh(), ASSERT_IS_VALID_MESH, BKE_id_free(), BKE_mesh_copy_for_eval(), BKE_mesh_from_bmesh_for_eval_nomain(), BKE_mesh_runtime_ensure_edit_data(), BKE_mesh_runtime_reset_edit_data(), BKE_mesh_vert_coords_alloc(), BKE_mesh_vert_coords_apply(), BKE_mesh_wrapper_ensure_mdata(), BKE_mesh_wrapper_from_editmesh_with_coords(), BKE_modifier_calc_data_masks(), BKE_modifier_deform_verts(), BKE_modifier_deform_vertsEM(), BKE_modifier_get_info(), BKE_modifier_modify_mesh(), BKE_modifiers_clear_errors(), BKE_modifiers_get_cage_index(), BKE_modifiers_get_virtual_modifierlist(), BLI_assert, BLI_linklist_free(), BMEditMesh::bm, CD_CALLOC, CD_MASK_BAREMESH, CD_MASK_ORCO, CD_MASK_ORIGINDEX, CD_MASK_ORIGSPACE_MLOOP, CD_ORCO, CD_ORIGSPACE_MLOOP, MeshComponent::copy_vertex_group_names_from_object(), create_orco_mesh(), CustomData_add_layer(), CustomData_has_layer(), CustomData_MeshMasks_update(), DAG_EVAL_RENDER, Object::data, ModifierTypeInfo::deformVertsEM, DEG_get_mode(), ModifierTypeInfo::dependsOnNormals, depsgraph, Mesh_Runtime::edit_data, editbmesh_calc_modifier_final_normals(), editbmesh_modifier_is_enabled(), editbmesh_vert_coords_alloc(), eModifierMode_Editmode, eModifierMode_Realtime, eModifierTypeType_OnlyDeform, Mesh::flag, float(), Mesh::id, LIB_TAG_COPIED_ON_WRITE, mask(), CDMaskLink::mask, ME_AUTOSMOOTH, MEM_dupallocN, MEM_freeN, mesh_init_origspace(), mesh_set_only_copy(), MOD_APPLY_ORCO, MOD_APPLY_RENDER, MOD_APPLY_USECACHE, modifier_modify_mesh_and_geometry_set(), CDMaskLink::next, ModifierData::next, ModifierTypeInfo::requiredDataMask, Mesh::runtime, scene, Mesh::smoothresh, ID::tag, ModifierTypeInfo::type, ModifierData::type, EditMeshData::vertexCos, and CustomData_MeshMasks::vmask.

Referenced by editbmesh_build_data().

◆ editbmesh_get_eval_cage()

Mesh* editbmesh_get_eval_cage ( struct Depsgraph depsgraph,
Scene scene,
Object obedit,
BMEditMesh em,
const CustomData_MeshMasks dataMask 
)

◆ editbmesh_get_eval_cage_and_final()

Mesh* editbmesh_get_eval_cage_and_final ( Depsgraph depsgraph,
Scene scene,
Object obedit,
BMEditMesh em,
const CustomData_MeshMasks dataMask,
Mesh **  r_final 
)

◆ editbmesh_get_eval_cage_from_orig()

Mesh* editbmesh_get_eval_cage_from_orig ( struct Depsgraph depsgraph,
Scene scene,
Object obedit,
const CustomData_MeshMasks dataMask 
)

◆ editbmesh_modifier_is_enabled()

bool editbmesh_modifier_is_enabled ( Scene scene,
const Object ob,
ModifierData md,
bool  has_prev_mesh 
)

◆ editbmesh_vert_coords_alloc()

float(* editbmesh_vert_coords_alloc ( BMEditMesh em,
int *  r_vert_len 
) )[3]

◆ get_editbmesh_orco_verts()

static float(* get_editbmesh_orco_verts ( BMEditMesh em) )[3]
static

◆ get_orco_coords()

static float(* get_orco_coords ( Object ob,
BMEditMesh em,
int  layer,
int *  free 
) )[3]
static

◆ make_vertexcos__mapFunc()

static void make_vertexcos__mapFunc ( void *  userData,
int  index,
const float  co[3],
const float   UNUSEDno_f[3],
const short   UNUSEDno_s[3] 
)
static

◆ makeDerivedMesh()

void makeDerivedMesh ( struct Depsgraph depsgraph,
Scene scene,
Object ob,
BMEditMesh em,
const CustomData_MeshMasks dataMask 
)

◆ mesh_build_data()

static void mesh_build_data ( struct Depsgraph depsgraph,
Scene scene,
Object ob,
const CustomData_MeshMasks dataMask,
const bool  need_mapping 
)
static

◆ mesh_build_extra_data()

static void mesh_build_extra_data ( struct Depsgraph depsgraph,
Object ob,
Mesh mesh_eval 
)
static

◆ mesh_calc_finalize()

static void mesh_calc_finalize ( const Mesh mesh_input,
Mesh mesh_eval 
)
static

Definition at line 869 of file DerivedMesh.cc.

References BLI_strncpy(), Mesh::edit_mesh, Mesh::id, and ID::name.

Referenced by mesh_calc_modifiers().

◆ mesh_calc_modifier_final_normals()

static void mesh_calc_modifier_final_normals ( const Mesh mesh_input,
const CustomData_MeshMasks final_datamask,
const bool  sculpt_dyntopo,
Mesh mesh_final 
)
static

◆ mesh_calc_modifiers()

static void mesh_calc_modifiers ( struct Depsgraph depsgraph,
Scene scene,
Object ob,
int  useDeform,
const bool  need_mapping,
const CustomData_MeshMasks dataMask,
const int  index,
const bool  use_cache,
const bool  allow_shared_mesh,
Mesh **  r_deform,
Mesh **  r_final,
GeometrySet **  r_geometry_set 
)
static

Definition at line 972 of file DerivedMesh.cc.

References add_orco_mesh(), ASSERT_IS_VALID_MESH, BKE_id_free(), BKE_mesh_copy_for_eval(), BKE_mesh_vert_coords_alloc(), BKE_mesh_vert_coords_apply(), BKE_modifier_calc_data_masks(), BKE_modifier_deform_verts(), BKE_modifier_free_temporary_data(), BKE_modifier_get_info(), BKE_modifier_get_last_preview(), BKE_modifier_is_enabled(), BKE_modifier_modify_mesh(), BKE_modifier_set_error(), BKE_modifier_supports_mapping(), BKE_modifiers_clear_errors(), BKE_modifiers_get_virtual_modifierlist(), BKE_sculpt_multires_active(), BLI_assert, BLI_findindex(), BLI_linklist_free(), BLI_mutex_lock(), BLI_mutex_unlock(), SculptSession::bm, CD_CALLOC, CD_CLOTH_ORCO, CD_MASK_BAREMESH_ORIGINDEX, CD_MASK_CLOTH_ORCO, CD_MASK_NORMAL, CD_MASK_ORCO, CD_MASK_ORIGINDEX, CD_MASK_ORIGSPACE_MLOOP, CD_MASK_PREVIEW_MLOOPCOL, CD_ORCO, CD_ORIGINDEX, CD_ORIGSPACE_MLOOP, MeshComponent::copy_vertex_group_names_from_object(), create_orco_mesh(), CustomData_add_layer(), CustomData_get_layer(), CustomData_has_layer(), CustomData_MeshMasks_update(), DAG_EVAL_RENDER, Object::data, DEG_get_mode(), ModifierTypeInfo::dependsOnNormals, dependsOnTime(), ModifierTypeInfo::dependsOnTime, depsgraph, CustomData_MeshMasks::emask, eModifierMode_Realtime, eModifierMode_Render, eModifierType_DynamicPaint, eModifierType_Multires, eModifierTypeFlag_RequiresOriginalData, eModifierTypeType_OnlyDeform, Mesh_Runtime::eval_mutex, ModifierTypeInfo::flags, Sculpt::flags, float(), CustomData_MeshMasks::fmask, Mesh::id, LIB_TAG_COPIED_ON_WRITE_EVAL_RESULT, CustomData_MeshMasks::lmask, mask(), CDMaskLink::mask, MEM_freeN, mesh_calc_finalize(), mesh_calc_modifier_final_normals(), Mesh_Runtime::mesh_eval, mesh_init_origspace(), mesh_set_only_copy(), MOD_APPLY_ORCO, MOD_APPLY_RENDER, MOD_APPLY_USECACHE, Object::mode, modifier_modify_mesh_and_geometry_set(), Object::modifiers, CDMaskLink::next, ModifierData::next, OB_MODE_OBJECT, OB_MODE_SCULPT, CustomData_MeshMasks::pmask, prepare_geometry_set_for_mesh_modifier(), range_vn_i(), ModifierTypeInfo::requiredDataMask, Mesh::runtime, scene, Object::sculpt, ToolSettings::sculpt, SCULPT_ONLY_DEFORM, ID::tag, Scene::toolsettings, Mesh::totvert, ModifierTypeInfo::type, ModifierData::type, and CustomData_MeshMasks::vmask.

Referenced by mesh_build_data(), mesh_create_eval_final(), mesh_create_eval_final_index_render(), mesh_create_eval_no_deform(), and mesh_create_eval_no_deform_render().

◆ mesh_create_eval_final()

Mesh* mesh_create_eval_final ( Depsgraph depsgraph,
Scene scene,
Object ob,
const CustomData_MeshMasks dataMask 
)

Definition at line 2150 of file DerivedMesh.cc.

References depsgraph, mesh_calc_modifiers(), and scene.

◆ mesh_create_eval_final_index_render()

Mesh* mesh_create_eval_final_index_render ( Depsgraph depsgraph,
Scene scene,
Object ob,
const CustomData_MeshMasks dataMask,
int  index 
)

Definition at line 2163 of file DerivedMesh.cc.

References depsgraph, mesh_calc_modifiers(), and scene.

◆ mesh_create_eval_no_deform()

Mesh* mesh_create_eval_no_deform ( Depsgraph depsgraph,
Scene scene,
Object ob,
const CustomData_MeshMasks dataMask 
)

Definition at line 2177 of file DerivedMesh.cc.

References depsgraph, mesh_calc_modifiers(), and scene.

◆ mesh_create_eval_no_deform_render()

Mesh* mesh_create_eval_no_deform_render ( Depsgraph depsgraph,
Scene scene,
Object ob,
const CustomData_MeshMasks dataMask 
)

Definition at line 2190 of file DerivedMesh.cc.

References depsgraph, mesh_calc_modifiers(), and scene.

◆ mesh_get_eval_deform()

Mesh* mesh_get_eval_deform ( struct Depsgraph depsgraph,
Scene scene,
Object ob,
const CustomData_MeshMasks dataMask 
)

◆ mesh_get_eval_final()

Mesh* mesh_get_eval_final ( struct Depsgraph depsgraph,
Scene scene,
Object ob,
const CustomData_MeshMasks dataMask 
)

◆ mesh_get_mapped_verts_coords()

void mesh_get_mapped_verts_coords ( Mesh me_eval,
float(*)  r_cos[3],
const int  totcos 
)

◆ mesh_init_origspace()

static void mesh_init_origspace ( Mesh mesh)
static

◆ mesh_runtime_check_normals_valid()

static void mesh_runtime_check_normals_valid ( const Mesh mesh)
static

◆ mesh_set_only_copy()

static void mesh_set_only_copy ( Mesh mesh,
const CustomData_MeshMasks mask 
)
static

◆ modifier_modify_mesh_and_geometry_set()

static Mesh* modifier_modify_mesh_and_geometry_set ( ModifierData md,
const ModifierEvalContext mectx,
Mesh input_mesh,
GeometrySet geometry_set 
)
static

Modifies the given mesh and geometry set. The mesh is not passed as part of the mesh component in the geometry_set input, it is only passed in input_mesh and returned in the return value.

The purpose of the geometry set is to store all geometry components that are generated by modifiers to allow outputting non-mesh data from modifiers.

Definition at line 923 of file DerivedMesh.cc.

References BKE_id_free(), BKE_mesh_copy_settings(), BKE_mesh_new_nomain(), BKE_mesh_wrapper_ensure_mdata(), BKE_modifier_get_info(), BKE_modifier_modify_mesh(), Editable, ELEM, GeometrySet::get_component_for_write(), GeometrySet::has(), ModifierTypeInfo::modifyGeometrySet, prepare_geometry_set_for_mesh_modifier(), MeshComponent::release(), MeshComponent::replace_mesh_but_keep_vertex_group_names(), and ModifierData::type.

Referenced by editbmesh_calc_modifiers(), and mesh_calc_modifiers().

◆ object_get_datamask()

static void object_get_datamask ( const Depsgraph depsgraph,
Object ob,
CustomData_MeshMasks r_mask,
bool *  r_need_mapping 
)
static

◆ prepare_geometry_set_for_mesh_modifier()

static Mesh* prepare_geometry_set_for_mesh_modifier ( Mesh mesh,
GeometrySet r_geometry_set 
)
static

Some modifiers don't work on geometry sets directly, but expect a single mesh as input. Therefore, we convert data from the geometry set into a single mesh, so that those modifiers can work on it as well.

Definition at line 893 of file DerivedMesh.cc.

References Editable, blender::bke::geometry_set_realize_mesh_for_modifier(), GeometrySet::get_component_for_write(), GeometrySet::has_instances(), GeometrySet::has_pointcloud(), mesh, MeshComponent::release(), and MeshComponent::replace_mesh_but_keep_vertex_group_names().

Referenced by mesh_calc_modifiers(), and modifier_modify_mesh_and_geometry_set().

Variable Documentation

◆ loops_cache_lock

ThreadRWMutex loops_cache_lock = PTHREAD_RWLOCK_INITIALIZER
static

Definition at line 93 of file DerivedMesh.cc.

Referenced by dm_getLoopTriArray().