[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