[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56472] trunk/blender/source/blender: Fix #35174: dynamic paint displacement missing in render.

Brecht Van Lommel brechtvanlommel at pandora.be
Thu May 2 16:42:06 CEST 2013


Revision: 56472
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56472
Author:   blendix
Date:     2013-05-02 14:42:05 +0000 (Thu, 02 May 2013)
Log Message:
-----------
Fix #35174: dynamic paint displacement missing in render.

A previous bugfix disabled the dynamic paint modifier for orco texture
coordinate evaluation of the modifier stack. However the MOD_APPLY_USECACHE
flag is not a good way to check if the modifier is evaluated for orcos.

Instead I've added a MOD_APPLY_ORCO flag. Also removed a bunch of
applyModifierEM callbacks, none of them served a purpose except for the
subsurf modifier.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_modifier.h
    trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
    trunk/blender/source/blender/blenkernel/intern/displist.c
    trunk/blender/source/blender/modifiers/intern/MOD_array.c
    trunk/blender/source/blender/modifiers/intern/MOD_bevel.c
    trunk/blender/source/blender/modifiers/intern/MOD_dynamicpaint.c
    trunk/blender/source/blender/modifiers/intern/MOD_edgesplit.c
    trunk/blender/source/blender/modifiers/intern/MOD_mirror.c
    trunk/blender/source/blender/modifiers/intern/MOD_ocean.c
    trunk/blender/source/blender/modifiers/intern/MOD_particleinstance.c
    trunk/blender/source/blender/modifiers/intern/MOD_screw.c
    trunk/blender/source/blender/modifiers/intern/MOD_skin.c
    trunk/blender/source/blender/modifiers/intern/MOD_solidify.c
    trunk/blender/source/blender/modifiers/intern/MOD_subsurf.c
    trunk/blender/source/blender/modifiers/intern/MOD_triangulate.c
    trunk/blender/source/blender/modifiers/intern/MOD_uvproject.c
    trunk/blender/source/blender/modifiers/intern/MOD_uvwarp.c
    trunk/blender/source/blender/modifiers/intern/MOD_weightvgedit.c
    trunk/blender/source/blender/modifiers/intern/MOD_weightvgmix.c
    trunk/blender/source/blender/modifiers/intern/MOD_weightvgproximity.c

Modified: trunk/blender/source/blender/blenkernel/BKE_modifier.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_modifier.h	2013-05-02 14:03:56 UTC (rev 56471)
+++ trunk/blender/source/blender/blenkernel/BKE_modifier.h	2013-05-02 14:42:05 UTC (rev 56472)
@@ -111,7 +111,9 @@
 
 typedef enum ModifierApplyFlag {
 	MOD_APPLY_RENDER = 1 << 0,       /* Render time. */
-	MOD_APPLY_USECACHE = 1 << 1,     /* Final result. Is not set for temporary calculations like orco dms. */
+	MOD_APPLY_USECACHE = 1 << 1,     /* Result of evaluation will be cached, so modifier might
+	                                  * want to cache data for quick updates (used by subsurf) */
+	MOD_APPLY_ORCO = 1 << 2          /* Modifier evaluated for undeformed texture coordinates */
 } ModifierApplyFlag;
 
 
@@ -200,7 +202,8 @@
 	 */
 	struct DerivedMesh *(*applyModifierEM)(struct ModifierData *md, struct Object *ob,
 	                                       struct BMEditMesh *editData,
-	                                       struct DerivedMesh *derivedData);
+	                                       struct DerivedMesh *derivedData,
+	                                       ModifierApplyFlag flag);
 
 
 	/********************* Optional functions *********************/

Modified: trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2013-05-02 14:03:56 UTC (rev 56471)
+++ trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2013-05-02 14:42:05 UTC (rev 56472)
@@ -1692,7 +1692,7 @@
 				DM_set_only_copy(orcodm, nextmask | CD_MASK_ORIGINDEX |
 				                 (mti->requiredDataMask ?
 				                  mti->requiredDataMask(ob, md) : 0));
-				ndm = mti->applyModifier(md, ob, orcodm, app_flags & ~MOD_APPLY_USECACHE);
+				ndm = mti->applyModifier(md, ob, orcodm, (app_flags & ~MOD_APPLY_USECACHE) | MOD_APPLY_ORCO);
 
 				if (ndm) {
 					/* if the modifier returned a new dm, release the old one */
@@ -1708,7 +1708,7 @@
 
 				nextmask &= ~CD_MASK_CLOTH_ORCO;
 				DM_set_only_copy(clothorcodm, nextmask | CD_MASK_ORIGINDEX);
-				ndm = mti->applyModifier(md, ob, clothorcodm, app_flags & ~MOD_APPLY_USECACHE);
+				ndm = mti->applyModifier(md, ob, clothorcodm, (app_flags & ~MOD_APPLY_USECACHE) | MOD_APPLY_ORCO);
 
 				if (ndm) {
 					/* if the modifier returned a new dm, release the old one */
@@ -2031,9 +2031,9 @@
 				DM_set_only_copy(orcodm, mask | CD_MASK_ORIGINDEX);
 
 				if (mti->applyModifierEM)
-					ndm = mti->applyModifierEM(md, ob, em, orcodm);
+					ndm = mti->applyModifierEM(md, ob, em, orcodm, MOD_APPLY_ORCO);
 				else
-					ndm = mti->applyModifier(md, ob, orcodm, 0);
+					ndm = mti->applyModifier(md, ob, orcodm, MOD_APPLY_ORCO);
 
 				if (ndm) {
 					/* if the modifier returned a new dm, release the old one */
@@ -2055,9 +2055,9 @@
 			}
 			
 			if (mti->applyModifierEM)
-				ndm = mti->applyModifierEM(md, ob, em, dm);
+				ndm = mti->applyModifierEM(md, ob, em, dm, MOD_APPLY_USECACHE);
 			else
-				ndm = mti->applyModifier(md, ob, dm, 0);
+				ndm = mti->applyModifier(md, ob, dm, MOD_APPLY_USECACHE);
 
 			if (ndm) {
 				if (dm && dm != ndm)

Modified: trunk/blender/source/blender/blenkernel/intern/displist.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/displist.c	2013-05-02 14:03:56 UTC (rev 56471)
+++ trunk/blender/source/blender/blenkernel/intern/displist.c	2013-05-02 14:42:05 UTC (rev 56472)
@@ -1132,10 +1132,12 @@
 	int required_mode;
 	int editmode = (!forRender && (cu->editnurb || cu->editfont));
 	DerivedMesh *ndm, *orcodm = NULL;
-	const ModifierApplyFlag app_flag = renderResolution ? MOD_APPLY_RENDER : 0;
+	ModifierApplyFlag app_flag = MOD_APPLY_ORCO;
 
-	if (renderResolution)
+	if (renderResolution) {
+		app_flag |= MOD_APPLY_RENDER;
 		required_mode = eModifierMode_Render;
+	}
 	else
 		required_mode = eModifierMode_Realtime;
 

Modified: trunk/blender/source/blender/modifiers/intern/MOD_array.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_array.c	2013-05-02 14:03:56 UTC (rev 56471)
+++ trunk/blender/source/blender/modifiers/intern/MOD_array.c	2013-05-02 14:42:05 UTC (rev 56472)
@@ -597,14 +597,7 @@
 	return result;
 }
 
-static DerivedMesh *applyModifierEM(ModifierData *md, Object *ob,
-                                    struct BMEditMesh *UNUSED(editData),
-                                    DerivedMesh *dm)
-{
-	return applyModifier(md, ob, dm, MOD_APPLY_USECACHE);
-}
 
-
 ModifierTypeInfo modifierType_Array = {
 	/* name */              "Array",
 	/* structName */        "ArrayModifierData",
@@ -622,7 +615,7 @@
 	/* deformVertsEM */     NULL,
 	/* deformMatricesEM */  NULL,
 	/* applyModifier */     applyModifier,
-	/* applyModifierEM */   applyModifierEM,
+	/* applyModifierEM */   NULL,
 	/* initData */          initData,
 	/* requiredDataMask */  NULL,
 	/* freeData */          NULL,

Modified: trunk/blender/source/blender/modifiers/intern/MOD_bevel.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_bevel.c	2013-05-02 14:03:56 UTC (rev 56471)
+++ trunk/blender/source/blender/modifiers/intern/MOD_bevel.c	2013-05-02 14:42:05 UTC (rev 56472)
@@ -215,14 +215,7 @@
 
 #endif
 
-static DerivedMesh *applyModifierEM(ModifierData *md, Object *ob,
-                                    struct BMEditMesh *UNUSED(editData),
-                                    DerivedMesh *derivedData)
-{
-	return applyModifier(md, ob, derivedData, MOD_APPLY_USECACHE);
-}
 
-
 ModifierTypeInfo modifierType_Bevel = {
 	/* name */              "Bevel",
 	/* structName */        "BevelModifierData",
@@ -238,7 +231,7 @@
 	/* deformVertsEM */     NULL,
 	/* deformMatricesEM */  NULL,
 	/* applyModifier */     applyModifier,
-	/* applyModifierEM */   applyModifierEM,
+	/* applyModifierEM */   NULL,
 	/* initData */          initData,
 	/* requiredDataMask */  requiredDataMask,
 	/* freeData */          NULL,

Modified: trunk/blender/source/blender/modifiers/intern/MOD_dynamicpaint.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_dynamicpaint.c	2013-05-02 14:03:56 UTC (rev 56471)
+++ trunk/blender/source/blender/modifiers/intern/MOD_dynamicpaint.c	2013-05-02 14:42:05 UTC (rev 56472)
@@ -110,7 +110,7 @@
 	DynamicPaintModifierData *pmd = (DynamicPaintModifierData *) md;
 
 	/* dont apply dynamic paint on orco dm stack */
-	if (flag & MOD_APPLY_USECACHE) {
+	if (!(flag & MOD_APPLY_ORCO)) {
 		return dynamicPaint_Modifier_do(pmd, md->scene, ob, dm);
 	}
 	return dm;

Modified: trunk/blender/source/blender/modifiers/intern/MOD_edgesplit.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_edgesplit.c	2013-05-02 14:03:56 UTC (rev 56471)
+++ trunk/blender/source/blender/modifiers/intern/MOD_edgesplit.c	2013-05-02 14:42:05 UTC (rev 56472)
@@ -141,14 +141,7 @@
 	return result;
 }
 
-static DerivedMesh *applyModifierEM(ModifierData *md, Object *ob,
-                                    struct BMEditMesh *UNUSED(editData),
-                                    DerivedMesh *derivedData)
-{
-	return applyModifier(md, ob, derivedData, MOD_APPLY_USECACHE);
-}
 
-
 ModifierTypeInfo modifierType_EdgeSplit = {
 	/* name */              "EdgeSplit",
 	/* structName */        "EdgeSplitModifierData",
@@ -166,7 +159,7 @@
 	/* deformVertsEM */     NULL,
 	/* deformMatricesEM */  NULL,
 	/* applyModifier */     applyModifier,
-	/* applyModifierEM */   applyModifierEM,
+	/* applyModifierEM */   NULL,
 	/* initData */          initData,
 	/* requiredDataMask */  NULL,
 	/* freeData */          NULL,

Modified: trunk/blender/source/blender/modifiers/intern/MOD_mirror.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_mirror.c	2013-05-02 14:03:56 UTC (rev 56471)
+++ trunk/blender/source/blender/modifiers/intern/MOD_mirror.c	2013-05-02 14:42:05 UTC (rev 56472)
@@ -335,14 +335,7 @@
 	return result;
 }
 
-static DerivedMesh *applyModifierEM(ModifierData *md, Object *ob,
-                                    struct BMEditMesh *UNUSED(editData),
-                                    DerivedMesh *derivedData)
-{
-	return applyModifier(md, ob, derivedData, MOD_APPLY_USECACHE);
-}
 
-
 ModifierTypeInfo modifierType_Mirror = {
 	/* name */              "Mirror",
 	/* structName */        "MirrorModifierData",
@@ -360,7 +353,7 @@
 	/* deformVertsEM */     NULL,
 	/* deformMatricesEM */  NULL,
 	/* applyModifier */     applyModifier,
-	/* applyModifierEM */   applyModifierEM,
+	/* applyModifierEM */   NULL,
 	/* initData */          initData,
 	/* requiredDataMask */  NULL,
 	/* freeData */          NULL,

Modified: trunk/blender/source/blender/modifiers/intern/MOD_ocean.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_ocean.c	2013-05-02 14:03:56 UTC (rev 56471)
+++ trunk/blender/source/blender/modifiers/intern/MOD_ocean.c	2013-05-02 14:42:05 UTC (rev 56472)
@@ -548,15 +548,7 @@
 	return result;
 }
 
-static DerivedMesh *applyModifierEM(ModifierData *md, Object *ob,
-                                    struct BMEditMesh *UNUSED(editData),
-                                    DerivedMesh *derivedData)
-{
-	return applyModifier(md, ob, derivedData, MOD_APPLY_USECACHE);
-}
 
-
-
 ModifierTypeInfo modifierType_Ocean = {
 	/* name */              "Ocean",
 	/* structName */        "OceanModifierData",
@@ -572,7 +564,7 @@
 	/* deformVertsEM */     NULL,
 	/* deformMatricesEM */  NULL,
 	/* applyModifier */     applyModifier,
-	/* applyModifierEM */   applyModifierEM,
+	/* applyModifierEM */   NULL,
 	/* initData */          initData,
 	/* requiredDataMask */  requiredDataMask,
 	/* freeData */          freeData,

Modified: trunk/blender/source/blender/modifiers/intern/MOD_particleinstance.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_particleinstance.c	2013-05-02 14:03:56 UTC (rev 56471)

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list