Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2012-03-06 20:22:41 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2012-03-06 20:22:41 +0400
commitbffeab99aef22181ea6284381b77fcc85833967c (patch)
tree690801d4a59419b72b026c241c4961b522ac3157 /source/blender/blenkernel
parent5ba020da4f3316c631d7c982a82e52d494930f20 (diff)
Fix for fracture object crash
Issue was caused by incorrect resetting of tesselated fave data in copy_mesh: - CustomData_free will free data from original mesh because layers in new mesh are pointing to the same memory just after copy. So it's needed only to set some pointers to NULL. - It was incorrect filling fdata with zeroes because of incorrect structure size used.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/intern/mesh.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index 708f85e0311..d5d96bcd79b 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -452,6 +452,19 @@ void free_dverts(MDeformVert *dvert, int totvert)
MEM_freeN (dvert);
}
+static void mesh_tessface_clear_intern(Mesh *mesh, int free_customdata)
+{
+ if (free_customdata)
+ CustomData_free(&mesh->fdata, mesh->totface);
+
+ mesh->mface = NULL;
+ mesh->mtface = NULL;
+ mesh->mcol = NULL;
+ mesh->totface = 0;
+
+ memset(&mesh->fdata, 0, sizeof(mesh->fdata));
+}
+
Mesh *add_mesh(const char *name)
{
Mesh *me;
@@ -492,7 +505,7 @@ Mesh *copy_mesh(Mesh *me)
CustomData_copy(&me->fdata, &men->fdata, CD_MASK_MESH, CD_DUPLICATE, men->totface);
}
else {
- BKE_mesh_tessface_clear(men);
+ mesh_tessface_clear_intern(men, FALSE);
}
mesh_update_customdata_pointers(men, do_tessface);
@@ -2971,12 +2984,5 @@ void BKE_mesh_tessface_ensure(Mesh *mesh)
void BKE_mesh_tessface_clear(Mesh *mesh)
{
- CustomData_free(&mesh->fdata, mesh->totface);
-
- mesh->mface = NULL;
- mesh->mtface = NULL;
- mesh->mcol = NULL;
- mesh->totface = 0;
-
- memset(&mesh->fdata, 0, sizeof(&mesh->fdata));
+ mesh_tessface_clear_intern(mesh, TRUE);
}