[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44567] trunk/blender/source/blender/ editors/transform: Fix crash on edge slide when object has got multires modifier
Sergey Sharybin
sergey.vfx at gmail.com
Thu Mar 1 08:11:00 CET 2012
Revision: 44567
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44567
Author: nazgul
Date: 2012-03-01 07:10:45 +0000 (Thu, 01 Mar 2012)
Log Message:
-----------
Fix crash on edge slide when object has got multires modifier
Issue was caused by fix for slide+automerge bug resulted in accessing to freed memory
from multires projection code. Solved by moving multires projection from cleanup callback
to special_aftertrans_update.
Patch by Antony Riakiotakis with some own corrections.
Modified Paths:
--------------
trunk/blender/source/blender/editors/transform/transform.c
trunk/blender/source/blender/editors/transform/transform.h
trunk/blender/source/blender/editors/transform/transform_conversions.c
Modified: trunk/blender/source/blender/editors/transform/transform.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.c 2012-03-01 02:20:10 UTC (rev 44566)
+++ trunk/blender/source/blender/editors/transform/transform.c 2012-03-01 07:10:45 UTC (rev 44567)
@@ -4783,16 +4783,6 @@
if (!sld)
return;
- /*handle multires reprojection, done
- on transform completion since it's
- really slow -joeedh*/
- if (t->state != TRANS_CANCEL) {
- projectSVData(t, 1);
- } else {
- sld->perc = 0.0;
- projectSVData(t, 0);
- }
-
freeSlideTempFaces(sld);
sld->em->bm->ob = t->obedit;
Modified: trunk/blender/source/blender/editors/transform/transform.h
===================================================================
--- trunk/blender/source/blender/editors/transform/transform.h 2012-03-01 02:20:10 UTC (rev 44566)
+++ trunk/blender/source/blender/editors/transform/transform.h 2012-03-01 07:10:45 UTC (rev 44567)
@@ -691,5 +691,6 @@
void freeSlideTempFaces(SlideData *sld);
void freeSlideVerts(TransInfo *t);
+void projectSVData(TransInfo *t, int final);
#endif
Modified: trunk/blender/source/blender/editors/transform/transform_conversions.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_conversions.c 2012-03-01 02:20:10 UTC (rev 44566)
+++ trunk/blender/source/blender/editors/transform/transform_conversions.c 2012-03-01 07:10:45 UTC (rev 44567)
@@ -4877,10 +4877,26 @@
/* we need to delete the temporary faces before automerging */
if(t->mode == TFM_EDGE_SLIDE){
SlideData *sld = t->customData;
+
+ /* handle multires reprojection, done
+ * on transform completion since it's
+ * really slow -joeedh */
+ projectSVData(t, TRUE);
+
+ /* free temporary faces to avoid automerging and deleting
+ * during cleanup - psy-fi */
freeSlideTempFaces(sld);
}
EDBM_automerge(t->scene, t->obedit, 1);
}
+ else {
+ if (t->mode == TFM_EDGE_SLIDE) {
+ SlideData *sld = t->customData;
+
+ sld->perc = 0.0;
+ projectSVData(t, FALSE);
+ }
+ }
}
}
More information about the Bf-blender-cvs
mailing list