diff options
author | Campbell Barton <ideasman42@gmail.com> | 2015-07-17 13:14:17 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2015-07-17 14:59:07 +0300 |
commit | e1606e8c87102a2295d40f817a3643df9b697c3d (patch) | |
tree | c540964c83b331c407485b6373934ec426ef9e4f /source | |
parent | 19614f4395b3a5404c96fdec02e0d5e89bfe9e32 (diff) |
Don't create MFace's when calculating normals
Instead only create MFace layer when its requested
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/intern/DerivedMesh.c | 24 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/cdderivedmesh.c | 3 |
2 files changed, 14 insertions, 13 deletions
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c index b3be4a4ebcf..a77e0767848 100644 --- a/source/blender/blenkernel/intern/DerivedMesh.c +++ b/source/blender/blenkernel/intern/DerivedMesh.c @@ -2085,11 +2085,10 @@ static void mesh_calc_modifiers( if (sculpt_dyntopo == false) { /* watch this! after 2.75a we move to from tessface to looptri (by default) */ -#if 0 - DM_ensure_tessface(finaldm); -#else + if (dataMask & CD_MASK_MFACE) { + DM_ensure_tessface(finaldm); + } DM_ensure_looptri(finaldm); -#endif /* without this, drawing ngon tri's faces will show ugly tessellated face * normals and will also have to calculate normals on the fly, try avoid @@ -2416,18 +2415,19 @@ static void editbmesh_calc_modifiers( } } - /* --- */ /* BMESH_ONLY, ensure tessface's used for drawing, * but don't recalculate if the last modifier in the stack gives us tessfaces * check if the derived meshes are DM_TYPE_EDITBMESH before calling, this isn't essential * but quiets annoying error messages since tessfaces wont be created. */ - if ((*r_final)->type != DM_TYPE_EDITBMESH) { - DM_ensure_tessface(*r_final); - } - if (r_cage && *r_cage) { - if ((*r_cage)->type != DM_TYPE_EDITBMESH) { - if (*r_cage != *r_final) { - DM_ensure_tessface(*r_cage); + if (dataMask & CD_MASK_MFACE) { + if ((*r_final)->type != DM_TYPE_EDITBMESH) { + DM_ensure_tessface(*r_final); + } + if (r_cage && *r_cage) { + if ((*r_cage)->type != DM_TYPE_EDITBMESH) { + if (*r_cage != *r_final) { + DM_ensure_tessface(*r_cage); + } } } } diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c index 4820514b314..6880c1c9b2a 100644 --- a/source/blender/blenkernel/intern/cdderivedmesh.c +++ b/source/blender/blenkernel/intern/cdderivedmesh.c @@ -2495,7 +2495,7 @@ void CDDM_calc_normals_mapping_ex(DerivedMesh *dm, const bool only_face_normals) cddm->mvert = CustomData_duplicate_referenced_layer(&dm->vertData, CD_MVERT, dm->numVertData); #endif - +#if 0 if (dm->numTessFaceData == 0) { /* No tessellation on this mesh yet, need to calculate one. * @@ -2509,6 +2509,7 @@ void CDDM_calc_normals_mapping_ex(DerivedMesh *dm, const bool only_face_normals) BLI_assert(CustomData_has_layer(&dm->faceData, CD_ORIGINDEX)); CustomData_free_layers(&dm->faceData, CD_NORMAL, dm->numTessFaceData); } +#endif face_nors = MEM_mallocN(sizeof(*face_nors) * dm->numPolyData, "face_nors"); |