[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [43066] branches/bmesh/blender/source/ blender/blenkernel/intern/DerivedMesh.c: fix for crash in the modifier stack when applying a deform modifier after a constructive modifier , also sync minor edits with trunk.
Campbell Barton
ideasman42 at gmail.com
Mon Jan 2 07:53:19 CET 2012
Revision: 43066
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43066
Author: campbellbarton
Date: 2012-01-02 06:53:09 +0000 (Mon, 02 Jan 2012)
Log Message:
-----------
fix for crash in the modifier stack when applying a deform modifier after a constructive modifier, also sync minor edits with trunk.
Modified Paths:
--------------
branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c 2012-01-02 03:52:10 UTC (rev 43065)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c 2012-01-02 06:53:09 UTC (rev 43066)
@@ -1298,7 +1298,7 @@
/* if this is not the last modifier in the stack then recalculate the normals
* to avoid giving bogus normals to the next modifier see: [#23673] */
- if(dm && isPrevDeform && mti->dependsOnNormals && mti->dependsOnNormals(md)) {
+ if(isPrevDeform && mti->dependsOnNormals && mti->dependsOnNormals(md)) {
/* XXX, this covers bug #23673, but we may need normal calc for other types */
if(dm && dm->type == DM_TYPE_CDDM) {
CDDM_apply_vert_coords(dm, deformedVerts);
@@ -1453,12 +1453,10 @@
dm->release(dm);
CDDM_apply_vert_coords(finaldm, deformedVerts);
-
CDDM_calc_normals(finaldm);
if((dataMask & CD_MASK_WEIGHT_MCOL) && (ob->mode & OB_MODE_WEIGHT_PAINT))
add_weight_mcol_dm(ob, finaldm, draw_flag);
-
} else if(dm) {
finaldm = dm;
} else {
@@ -1571,7 +1569,7 @@
ModifierData *md;
float (*deformedVerts)[3] = NULL;
CustomDataMask mask;
- DerivedMesh *dm = NULL, *orcodm = NULL, *finaldm = NULL;
+ DerivedMesh *dm, *orcodm = NULL;
int i, numVerts = 0, cageIndex = modifiers_getCageIndex(scene, ob, NULL, 1);
LinkNode *datamasks, *curr;
int required_mode = eModifierMode_Realtime | eModifierMode_Editmode;
@@ -1582,6 +1580,7 @@
*cage_r = getEditDerivedBMesh(em, ob, NULL);
}
+ dm = NULL;
md = modifiers_getVirtualModifierList(ob);
datamasks = modifiers_calcDataMasks(scene, ob, md, dataMask, required_mode);
@@ -1723,24 +1722,24 @@
* then we need to build one.
*/
if(dm && deformedVerts) {
- finaldm = CDDM_copy(dm, 0);
+ *final_r = CDDM_copy(dm, 0);
if(!(cage_r && dm == *cage_r)) dm->release(dm);
CDDM_apply_vert_coords(*final_r, deformedVerts);
+ CDDM_calc_normals(*final_r);
} else if (dm) {
- finaldm = dm;
+ *final_r = dm;
+ (*final_r)->calcNormals(*final_r); /* BMESH_ONLY - BMESH_TODO. check if this is needed */
} else if (!deformedVerts && cage_r && *cage_r) {
- finaldm = *cage_r;
+ *final_r = *cage_r;
+ (*final_r)->calcNormals(*final_r); /* BMESH_ONLY - BMESH_TODO. check if this is needed */
} else {
- finaldm = getEditDerivedBMesh(em, ob, deformedVerts);
+ *final_r = getEditDerivedBMesh(em, ob, deformedVerts);
deformedVerts = NULL;
+ (*final_r)->calcNormals(*final_r); /* BMESH_ONLY - BMESH_TODO. check if this is needed */
}
- finaldm->calcNormals(finaldm);
-
- *final_r = finaldm;
-
/* add an orco layer if needed */
if(dataMask & CD_MASK_ORCO)
add_orco_dm(ob, em, *final_r, orcodm, CD_ORCO);
More information about the Bf-blender-cvs
mailing list