[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [60066] trunk/blender/source/blender: more localized fix for [#36299], only changes behavior for subsurf with orco in editmode

Campbell Barton ideasman42 at gmail.com
Thu Sep 12 12:41:01 CEST 2013


Revision: 60066
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=60066
Author:   campbellbarton
Date:     2013-09-12 10:41:00 +0000 (Thu, 12 Sep 2013)
Log Message:
-----------
more localized fix for [#36299], only changes behavior for subsurf with orco in editmode

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
    trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c
    trunk/blender/source/blender/modifiers/intern/MOD_subsurf.c

Modified: trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2013-09-12 08:43:25 UTC (rev 60065)
+++ trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2013-09-12 10:41:00 UTC (rev 60066)
@@ -2086,14 +2086,10 @@
 				mask &= ~CD_MASK_ORCO;
 				DM_set_only_copy(orcodm, mask | CD_MASK_ORIGINDEX);
 
-				/* disabled: subsurf can't calculate twice on the same editmesh (uses freed cache) [#36299] */
-#if 0
 				if (mti->applyModifierEM) {
 					ndm = modwrap_applyModifierEM(md, ob, em, orcodm, MOD_APPLY_ORCO);
 				}
-				else
-#endif
-				{
+				else {
 					ndm = modwrap_applyModifier(md, ob, orcodm, MOD_APPLY_ORCO);
 				}
 				ASSERT_IS_VALID_DM(ndm);

Modified: trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c	2013-09-12 08:43:25 UTC (rev 60065)
+++ trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c	2013-09-12 10:41:00 UTC (rev 60066)
@@ -3573,6 +3573,8 @@
 	int drawInteriorEdges = !(smd->flags & eSubsurfModifierFlag_ControlEdges);
 	CCGDerivedMesh *result;
 
+	/* note: editmode calculation can only run once per
+	 * modifier stack evaluation (uses freed cache) [#36299] */
 	if (flags & SUBSURF_FOR_EDIT_MODE) {
 		int levels = (smd->modifier.scene) ? get_render_subsurf_level(&smd->modifier.scene->r, smd->levels) : smd->levels;
 

Modified: trunk/blender/source/blender/modifiers/intern/MOD_subsurf.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_subsurf.c	2013-09-12 08:43:25 UTC (rev 60065)
+++ trunk/blender/source/blender/modifiers/intern/MOD_subsurf.c	2013-09-12 10:41:00 UTC (rev 60066)
@@ -121,14 +121,14 @@
 static DerivedMesh *applyModifierEM(ModifierData *md, Object *UNUSED(ob),
                                     struct BMEditMesh *UNUSED(editData),
                                     DerivedMesh *derivedData,
-                                    ModifierApplyFlag UNUSED(flag))
+                                    ModifierApplyFlag flag)
 {
 	SubsurfModifierData *smd = (SubsurfModifierData *) md;
 	DerivedMesh *result;
+	/* 'orco' using editmode flags would cause cache to be used twice in editbmesh_calc_modifiers */
+	SubsurfFlags ss_flags = (flag & MOD_APPLY_ORCO) ? 0 : (SUBSURF_FOR_EDIT_MODE | SUBSURF_IN_EDIT_MODE);
 
-	result = subsurf_make_derived_from_derived(derivedData, smd,
-	                                           NULL, (SUBSURF_FOR_EDIT_MODE |
-	                                                  SUBSURF_IN_EDIT_MODE));
+	result = subsurf_make_derived_from_derived(derivedData, smd, NULL, ss_flags);
 
 	return result;
 }




More information about the Bf-blender-cvs mailing list