From ab0bc65c24bdf68c356adb2566f3669153c931ea Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Thu, 7 Mar 2019 11:13:40 +0100 Subject: Refactor CDData masks, to have one mask per mesh elem type. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We already have different storages for cddata of verts, edges etc., 'simply' do the same for the mask flags we use all around Blender code to request some data, or limit some operation to some layers, etc. Reason we need this is that some cddata types (like Normals) are actually shared between verts/polys/loops, and we don’t want to generate clnors everytime we request vnors! As a side note, this also does final fix to T59338, which was the trigger for this patch (need to request computed loop normals for another mesh than evaluated one). Reviewers: brecht, campbellbarton, sergey Differential Revision: https://developer.blender.org/D4407 --- source/blender/blenkernel/BKE_DerivedMesh.h | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'source/blender/blenkernel/BKE_DerivedMesh.h') diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h index fb78e03639b..cd7422415dc 100644 --- a/source/blender/blenkernel/BKE_DerivedMesh.h +++ b/source/blender/blenkernel/BKE_DerivedMesh.h @@ -75,6 +75,7 @@ struct BMEditMesh; struct CCGElem; struct CCGKey; +struct CustomData_MeshMasks; struct Depsgraph; struct MEdge; struct MFace; @@ -348,7 +349,7 @@ void DM_from_template_ex( DerivedMesh *dm, DerivedMesh *source, DerivedMeshType type, int numVerts, int numEdges, int numTessFaces, int numLoops, int numPolys, - CustomDataMask mask); + const struct CustomData_MeshMasks *mask); void DM_from_template( DerivedMesh *dm, DerivedMesh *source, DerivedMeshType type, @@ -362,10 +363,11 @@ int DM_release(DerivedMesh *dm); /** utility function to convert a DerivedMesh to a Mesh */ -void DM_to_mesh(DerivedMesh *dm, struct Mesh *me, struct Object *ob, CustomDataMask mask, bool take_ownership); +void DM_to_mesh(DerivedMesh *dm, struct Mesh *me, struct Object *ob, + const struct CustomData_MeshMasks *mask, bool take_ownership); -void DM_set_only_copy(DerivedMesh *dm, CustomDataMask mask); +void DM_set_only_copy(DerivedMesh *dm, const struct CustomData_MeshMasks *mask); /* adds a vertex/edge/face custom data layer to a DerivedMesh, optionally * backed by an external data array @@ -488,27 +490,27 @@ void mesh_get_mapped_verts_coords(struct Mesh *me_eval, float (*r_cos)[3], const DerivedMesh *mesh_create_derived_render( struct Depsgraph *depsgraph, struct Scene *scene, - struct Object *ob, CustomDataMask dataMask); + struct Object *ob, const struct CustomData_MeshMasks *dataMask); /* same as above but wont use render settings */ DerivedMesh *mesh_create_derived(struct Mesh *me, float (*vertCos)[3]); struct Mesh *editbmesh_get_eval_cage( struct Depsgraph *depsgraph, struct Scene *scene, struct Object *, - struct BMEditMesh *em, CustomDataMask dataMask); + struct BMEditMesh *em, const struct CustomData_MeshMasks *dataMask); struct Mesh *editbmesh_get_eval_cage_from_orig( struct Depsgraph *depsgraph, struct Scene *scene, struct Object *, - struct BMEditMesh *em, CustomDataMask dataMask); + struct BMEditMesh *em, const struct CustomData_MeshMasks *dataMask); struct Mesh *editbmesh_get_eval_cage_and_final( struct Depsgraph *depsgraph, struct Scene *scene, struct Object *, - struct BMEditMesh *em, CustomDataMask dataMask, + struct BMEditMesh *em, const struct CustomData_MeshMasks *dataMask, struct Mesh **r_final); float (*editbmesh_get_vertex_cos(struct BMEditMesh *em, int *r_numVerts))[3]; bool editbmesh_modifier_is_enabled(struct Scene *scene, struct ModifierData *md, bool has_prev_mesh); void makeDerivedMesh( struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, struct BMEditMesh *em, - CustomDataMask dataMask, const bool build_shapekey_layers); + const struct CustomData_MeshMasks *dataMask, const bool build_shapekey_layers); void DM_add_named_tangent_layer_for_uv( CustomData *uv_data, CustomData *tan_data, int numLoopData, -- cgit v1.2.3