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-14 18:09:56 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2012-03-14 18:09:56 +0400
commit930f43bd96b6ec48e202bfb7b4d62731e9d10bfc (patch)
tree58fe7cb11d7bc87f08f0ee32ea68a3082bf681b9 /source/blender/blenkernel
parenta829a905dafda5b23e1bd6c5e67e9093b0018aa3 (diff)
Fix crash on edge extrude from textured view
Issue was caused by MFACE layer adding for even DM without tessellated faces which lead to adding new layer but with NULL data. This causes issues when layer with faces (after extrude) was attempting to add because currently CD only checks if layer type exists but does not check for size of the layer. Solved by not adding MFACE layer if there's no tessellated faces.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/intern/DerivedMesh.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index 66cd8adc60b..52d0161969b 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -119,8 +119,17 @@ static MFace *dm_getTessFaceArray(DerivedMesh *dm)
MFace *mface = CustomData_get_layer(&dm->faceData, CD_MFACE);
if (!mface) {
- mface = CustomData_add_layer(&dm->faceData, CD_MFACE, CD_CALLOC, NULL,
- dm->getNumTessFaces(dm));
+ int numTessFaces = dm->getNumTessFaces(dm);
+
+ if (!numTessFaces) {
+ /* Do not add layer if there's no elements in it, this leads to issues later when
+ * this layer is needed with non-zero size, but currently CD stuff does not check
+ * for requested layer size on creation and just returns layer which was previously
+ * added (sergey) */
+ return NULL;
+ }
+
+ mface = CustomData_add_layer(&dm->faceData, CD_MFACE, CD_CALLOC, NULL, numTessFaces);
CustomData_set_layer_flag(&dm->faceData, CD_MFACE, CD_FLAG_TEMPORARY);
dm->copyTessFaceArray(dm, mface);
}