[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58312] trunk/blender/source/blender/ modifiers/intern: fix own regression [#36154] Simple deform modifier doesn' t recalculate normals

Campbell Barton ideasman42 at gmail.com
Tue Jul 16 10:24:53 CEST 2013


Revision: 58312
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58312
Author:   campbellbarton
Date:     2013-07-16 08:24:53 +0000 (Tue, 16 Jul 2013)
Log Message:
-----------
fix own regression [#36154] Simple deform modifier doesn't recalculate normals
get_cddm and get_dm are called within modifiers so they wont ensure normals are valid, added an arg to optionally ensure valid normals.

Modified Paths:
--------------
    trunk/blender/source/blender/modifiers/intern/MOD_cast.c
    trunk/blender/source/blender/modifiers/intern/MOD_cloth.c
    trunk/blender/source/blender/modifiers/intern/MOD_displace.c
    trunk/blender/source/blender/modifiers/intern/MOD_hook.c
    trunk/blender/source/blender/modifiers/intern/MOD_laplaciansmooth.c
    trunk/blender/source/blender/modifiers/intern/MOD_meshdeform.c
    trunk/blender/source/blender/modifiers/intern/MOD_particlesystem.c
    trunk/blender/source/blender/modifiers/intern/MOD_shrinkwrap.c
    trunk/blender/source/blender/modifiers/intern/MOD_simpledeform.c
    trunk/blender/source/blender/modifiers/intern/MOD_smooth.c
    trunk/blender/source/blender/modifiers/intern/MOD_surface.c
    trunk/blender/source/blender/modifiers/intern/MOD_util.c
    trunk/blender/source/blender/modifiers/intern/MOD_util.h
    trunk/blender/source/blender/modifiers/intern/MOD_warp.c
    trunk/blender/source/blender/modifiers/intern/MOD_wave.c

Modified: trunk/blender/source/blender/modifiers/intern/MOD_cast.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_cast.c	2013-07-16 06:49:03 UTC (rev 58311)
+++ trunk/blender/source/blender/modifiers/intern/MOD_cast.c	2013-07-16 08:24:53 UTC (rev 58312)
@@ -453,7 +453,7 @@
 	DerivedMesh *dm = NULL;
 	CastModifierData *cmd = (CastModifierData *)md;
 
-	dm = get_dm(ob, NULL, derivedData, NULL, 0);
+	dm = get_dm(ob, NULL, derivedData, NULL, false, false);
 
 	if (cmd->type == MOD_CAST_TYPE_CUBOID) {
 		cuboid_do(cmd, ob, dm, vertexCos, numVerts);
@@ -470,7 +470,7 @@
         ModifierData *md, Object *ob, struct BMEditMesh *editData,
         DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
 {
-	DerivedMesh *dm = get_dm(ob, editData, derivedData, NULL, 0);
+	DerivedMesh *dm = get_dm(ob, editData, derivedData, NULL, false, false);
 	CastModifierData *cmd = (CastModifierData *)md;
 
 	if (cmd->type == MOD_CAST_TYPE_CUBOID) {

Modified: trunk/blender/source/blender/modifiers/intern/MOD_cloth.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_cloth.c	2013-07-16 06:49:03 UTC (rev 58311)
+++ trunk/blender/source/blender/modifiers/intern/MOD_cloth.c	2013-07-16 08:24:53 UTC (rev 58312)
@@ -82,7 +82,7 @@
 			return;
 	}
 
-	dm = get_dm(ob, NULL, derivedData, NULL, 0);
+	dm = get_dm(ob, NULL, derivedData, NULL, false, false);
 	if (dm == derivedData)
 		dm = CDDM_copy(dm);
 

Modified: trunk/blender/source/blender/modifiers/intern/MOD_displace.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_displace.c	2013-07-16 06:49:03 UTC (rev 58311)
+++ trunk/blender/source/blender/modifiers/intern/MOD_displace.c	2013-07-16 08:24:53 UTC (rev 58312)
@@ -265,7 +265,7 @@
                         int numVerts,
                         ModifierApplyFlag UNUSED(flag))
 {
-	DerivedMesh *dm = get_cddm(ob, NULL, derivedData, vertexCos);
+	DerivedMesh *dm = get_cddm(ob, NULL, derivedData, vertexCos, dependsOnNormals(md));
 
 	displaceModifier_do((DisplaceModifierData *)md, ob, dm,
 	                    vertexCos, numVerts);
@@ -278,7 +278,7 @@
         ModifierData *md, Object *ob, struct BMEditMesh *editData,
         DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
 {
-	DerivedMesh *dm = get_cddm(ob, editData, derivedData, vertexCos);
+	DerivedMesh *dm = get_cddm(ob, editData, derivedData, vertexCos, dependsOnNormals(md));
 
 	displaceModifier_do((DisplaceModifierData *)md, ob, dm,
 	                    vertexCos, numVerts);

Modified: trunk/blender/source/blender/modifiers/intern/MOD_hook.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_hook.c	2013-07-16 06:49:03 UTC (rev 58311)
+++ trunk/blender/source/blender/modifiers/intern/MOD_hook.c	2013-07-16 08:24:53 UTC (rev 58312)
@@ -252,7 +252,7 @@
 	DerivedMesh *dm = derivedData;
 	/* We need a valid dm for meshes when a vgroup is set... */
 	if (!dm && ob->type == OB_MESH && hmd->name[0] != '\0')
-		dm = get_dm(ob, NULL, dm, NULL, 0);
+		dm = get_dm(ob, NULL, dm, NULL, false, false);
 
 	deformVerts_do(hmd, ob, dm, vertexCos, numVerts);
 
@@ -267,7 +267,7 @@
 	DerivedMesh *dm = derivedData;
 	/* We need a valid dm for meshes when a vgroup is set... */
 	if (!dm && ob->type == OB_MESH && hmd->name[0] != '\0')
-		dm = get_dm(ob, editData, dm, NULL, 0);
+		dm = get_dm(ob, editData, dm, NULL, false, false);
 
 	deformVerts_do(hmd, ob, dm, vertexCos, numVerts);
 

Modified: trunk/blender/source/blender/modifiers/intern/MOD_laplaciansmooth.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_laplaciansmooth.c	2013-07-16 06:49:03 UTC (rev 58311)
+++ trunk/blender/source/blender/modifiers/intern/MOD_laplaciansmooth.c	2013-07-16 08:24:53 UTC (rev 58312)
@@ -669,7 +669,7 @@
 static void deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData,
                         float (*vertexCos)[3], int numVerts, ModifierApplyFlag UNUSED(flag))
 {
-	DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, 0);
+	DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, false, false);
 
 	laplaciansmoothModifier_do((LaplacianSmoothModifierData *)md, ob, dm,
 	                           vertexCos, numVerts);
@@ -682,7 +682,7 @@
         ModifierData *md, Object *ob, struct BMEditMesh *editData,
         DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
 {
-	DerivedMesh *dm = get_dm(ob, editData, derivedData, NULL, 0);
+	DerivedMesh *dm = get_dm(ob, editData, derivedData, NULL, false, false);
 
 	laplaciansmoothModifier_do((LaplacianSmoothModifierData *)md, ob, dm,
 	                           vertexCos, numVerts);

Modified: trunk/blender/source/blender/modifiers/intern/MOD_meshdeform.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_meshdeform.c	2013-07-16 06:49:03 UTC (rev 58311)
+++ trunk/blender/source/blender/modifiers/intern/MOD_meshdeform.c	2013-07-16 08:24:53 UTC (rev 58312)
@@ -212,7 +212,7 @@
 	/* if we don't have one computed, use derivedmesh from data
 	 * without any modifiers */
 	if (!cagedm) {
-		cagedm = get_dm(mmd->object, NULL, NULL, NULL, 0);
+		cagedm = get_dm(mmd->object, NULL, NULL, NULL, false, false);
 		if (cagedm)
 			cagedm->needsFree = 1;
 	}
@@ -343,7 +343,7 @@
                         int numVerts,
                         ModifierApplyFlag UNUSED(flag))
 {
-	DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, 0);
+	DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, false, false);
 
 	modifier_vgroup_cache(md, vertexCos); /* if next modifier needs original vertices */
 	
@@ -359,7 +359,7 @@
                           float (*vertexCos)[3],
                           int numVerts)
 {
-	DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, 0);
+	DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, false, false);
 
 	meshdeformModifier_do(md, ob, dm, vertexCos, numVerts);
 

Modified: trunk/blender/source/blender/modifiers/intern/MOD_particlesystem.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_particlesystem.c	2013-07-16 06:49:03 UTC (rev 58311)
+++ trunk/blender/source/blender/modifiers/intern/MOD_particlesystem.c	2013-07-16 08:24:53 UTC (rev 58312)
@@ -142,7 +142,7 @@
 		return;
 
 	if (dm == NULL) {
-		dm = get_dm(ob, NULL, NULL, vertexCos, 1);
+		dm = get_dm(ob, NULL, NULL, vertexCos, false, true);
 
 		if (!dm)
 			return;

Modified: trunk/blender/source/blender/modifiers/intern/MOD_shrinkwrap.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_shrinkwrap.c	2013-07-16 06:49:03 UTC (rev 58311)
+++ trunk/blender/source/blender/modifiers/intern/MOD_shrinkwrap.c	2013-07-16 08:24:53 UTC (rev 58312)
@@ -48,7 +48,9 @@
 
 #include "MOD_util.h"
 
+static bool dependsOnNormals(ModifierData *md);
 
+
 static void initData(ModifierData *md)
 {
 	ShrinkwrapModifierData *smd = (ShrinkwrapModifierData *) md;
@@ -120,8 +122,9 @@
 	CustomDataMask dataMask = requiredDataMask(ob, md);
 
 	/* ensure we get a CDDM with applied vertex coords */
-	if (dataMask)
-		dm = get_cddm(ob, NULL, dm, vertexCos);
+	if (dataMask) {
+		dm = get_cddm(ob, NULL, dm, vertexCos, dependsOnNormals(md));
+	}
 
 	shrinkwrapModifier_deform((ShrinkwrapModifierData *)md, ob, dm, vertexCos, numVerts);
 
@@ -136,8 +139,9 @@
 	CustomDataMask dataMask = requiredDataMask(ob, md);
 
 	/* ensure we get a CDDM with applied vertex coords */
-	if (dataMask)
-		dm = get_cddm(ob, editData, dm, vertexCos);
+	if (dataMask) {
+		dm = get_cddm(ob, editData, dm, vertexCos, dependsOnNormals(md));
+	}
 
 	shrinkwrapModifier_deform((ShrinkwrapModifierData *)md, ob, dm, vertexCos, numVerts);
 

Modified: trunk/blender/source/blender/modifiers/intern/MOD_simpledeform.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_simpledeform.c	2013-07-16 06:49:03 UTC (rev 58311)
+++ trunk/blender/source/blender/modifiers/intern/MOD_simpledeform.c	2013-07-16 08:24:53 UTC (rev 58312)
@@ -317,7 +317,7 @@
 	/* we implement requiredDataMask but thats not really useful since
 	 * mesh_calc_modifiers pass a NULL derivedData */
 	if (dataMask)
-		dm = get_dm(ob, NULL, dm, NULL, 0);
+		dm = get_dm(ob, NULL, dm, NULL, false, false);
 
 	SimpleDeformModifier_do((SimpleDeformModifierData *)md, ob, dm, vertexCos, numVerts);
 
@@ -337,7 +337,7 @@
 	/* we implement requiredDataMask but thats not really useful since
 	 * mesh_calc_modifiers pass a NULL derivedData */
 	if (dataMask)
-		dm = get_dm(ob, editData, dm, NULL, 0);
+		dm = get_dm(ob, editData, dm, NULL, false, false);
 
 	SimpleDeformModifier_do((SimpleDeformModifierData *)md, ob, dm, vertexCos, numVerts);
 

Modified: trunk/blender/source/blender/modifiers/intern/MOD_smooth.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_smooth.c	2013-07-16 06:49:03 UTC (rev 58311)
+++ trunk/blender/source/blender/modifiers/intern/MOD_smooth.c	2013-07-16 08:24:53 UTC (rev 58312)
@@ -221,7 +221,7 @@
 static void deformVerts(ModifierData *md, Object *ob, DerivedMesh *derivedData,
                         float (*vertexCos)[3], int numVerts, ModifierApplyFlag UNUSED(flag))
 {
-	DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, 0);
+	DerivedMesh *dm = get_dm(ob, NULL, derivedData, NULL, false, false);
 
 	smoothModifier_do((SmoothModifierData *)md, ob, dm,
 	                  vertexCos, numVerts);
@@ -234,7 +234,7 @@
         ModifierData *md, Object *ob, struct BMEditMesh *editData,
         DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
 {
-	DerivedMesh *dm = get_dm(ob, editData, derivedData, NULL, 0);
+	DerivedMesh *dm = get_dm(ob, editData, derivedData, NULL, false, false);
 
 	smoothModifier_do((SmoothModifierData *)md, ob, dm,
 	                  vertexCos, numVerts);

Modified: trunk/blender/source/blender/modifiers/intern/MOD_surface.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_surface.c	2013-07-16 06:49:03 UTC (rev 58311)

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list