[Bf-blender-cvs] [4a2213dc9a1] blender2.8: Fix modifiers not using depsgraph time for texture evaluation.

Bastien Montagne noreply at git.blender.org
Wed May 23 15:55:20 CEST 2018


Commit: 4a2213dc9a15d6fbff49cde6f919f27b7fbecf89
Author: Bastien Montagne
Date:   Wed May 23 15:52:35 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB4a2213dc9a15d6fbff49cde6f919f27b7fbecf89

Fix modifiers not using depsgraph time for texture evaluation.

Texture animation seems to be broken anyway currently, but at leat
modifier side it should now be OK.

===================================================================

M	source/blender/modifiers/intern/MOD_displace.c
M	source/blender/modifiers/intern/MOD_util.c
M	source/blender/modifiers/intern/MOD_util.h
M	source/blender/modifiers/intern/MOD_warp.c
M	source/blender/modifiers/intern/MOD_wave.c
M	source/blender/modifiers/intern/MOD_weightvg_util.c
M	source/blender/modifiers/intern/MOD_weightvg_util.h
M	source/blender/modifiers/intern/MOD_weightvgedit.c
M	source/blender/modifiers/intern/MOD_weightvgmix.c
M	source/blender/modifiers/intern/MOD_weightvgproximity.c

===================================================================

diff --git a/source/blender/modifiers/intern/MOD_displace.c b/source/blender/modifiers/intern/MOD_displace.c
index 7997ccbfedc..d6b96b34273 100644
--- a/source/blender/modifiers/intern/MOD_displace.c
+++ b/source/blender/modifiers/intern/MOD_displace.c
@@ -52,6 +52,8 @@
 #include "BKE_deform.h"
 #include "BKE_object.h"
 
+#include "DEG_depsgraph.h"
+
 #include "MEM_guardedalloc.h"
 
 #include "MOD_util.h"
@@ -271,9 +273,11 @@ static void displaceModifier_do_task(
 
 /* dm must be a CDDerivedMesh */
 static void displaceModifier_do(
-        DisplaceModifierData *dmd, Object *ob,
+        DisplaceModifierData *dmd, const ModifierEvalContext *ctx,
         Mesh *mesh, float (*vertexCos)[3], const int numVerts)
 {
+	Object *ob = ctx->object;
+	Depsgraph *depsgraph = ctx->depsgraph;
 	MVert *mvert;
 	MDeformVert *dvert;
 	int direction = dmd->direction;
@@ -295,7 +299,7 @@ static void displaceModifier_do(
 		                     "displaceModifier_do tex_co");
 		get_texture_coords_mesh((MappingInfoModifierData *)dmd, ob, mesh, vertexCos, tex_co);
 
-		modifier_init_texture(dmd->modifier.scene, dmd->texture);
+		modifier_init_texture(depsgraph, dmd->texture);
 	}
 	else {
 		tex_co = NULL;
@@ -374,8 +378,7 @@ static void deformVerts(
 
 	BLI_assert(mesh_src->totvert == numVerts);
 
-	displaceModifier_do((DisplaceModifierData *)md, ctx->object, mesh_src,
-	                    vertexCos, numVerts);
+	displaceModifier_do((DisplaceModifierData *)md, ctx, mesh_src, vertexCos, numVerts);
 
 	if (mesh_src != mesh) {
 		BKE_id_free(NULL, mesh_src);
@@ -390,7 +393,7 @@ static void deformVertsEM(
 
 	BLI_assert(mesh_src->totvert == numVerts);
 
-	displaceModifier_do((DisplaceModifierData *)md, ctx->object, mesh_src, vertexCos, numVerts);
+	displaceModifier_do((DisplaceModifierData *)md, ctx, mesh_src, vertexCos, numVerts);
 
 	if (mesh_src != mesh) {
 		BKE_id_free(NULL, mesh_src);
diff --git a/source/blender/modifiers/intern/MOD_util.c b/source/blender/modifiers/intern/MOD_util.c
index c5593cd004e..4a62d17fa27 100644
--- a/source/blender/modifiers/intern/MOD_util.c
+++ b/source/blender/modifiers/intern/MOD_util.c
@@ -53,6 +53,9 @@
 
 #include "BKE_modifier.h"
 
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_query.h"
+
 #include "MOD_util.h"
 #include "MOD_modifiertypes.h"
 
@@ -60,13 +63,13 @@
 
 #include "bmesh.h"
 
-void modifier_init_texture(const Scene *scene, Tex *tex)
+void modifier_init_texture(const Depsgraph *depsgraph, Tex *tex)
 {
 	if (!tex)
 		return;
 
 	if (tex->ima && BKE_image_is_animated(tex->ima)) {
-		BKE_image_user_frame_calc(&tex->iuser, scene->r.cfra, 0);
+		BKE_image_user_frame_calc(&tex->iuser, DEG_get_ctime(depsgraph), 0);
 	}
 }
 
diff --git a/source/blender/modifiers/intern/MOD_util.h b/source/blender/modifiers/intern/MOD_util.h
index 4ca13e164fb..0b3452b22b8 100644
--- a/source/blender/modifiers/intern/MOD_util.h
+++ b/source/blender/modifiers/intern/MOD_util.h
@@ -34,6 +34,7 @@
 #include "DEG_depsgraph_build.h"
 
 struct DerivedMesh;
+struct Depsgraph;
 struct MDeformVert;
 struct Mesh;
 struct ModifierData;
@@ -41,7 +42,7 @@ struct Object;
 struct Scene;
 struct Tex;
 
-void modifier_init_texture(const struct Scene *scene, struct Tex *texture);
+void modifier_init_texture(const struct Depsgraph *depsgraph, struct Tex *texture);
 void get_texture_coords(
         struct MappingInfoModifierData *dmd, struct Object *ob, struct DerivedMesh *dm,
         float (*co)[3], float (*texco)[3], int numVerts);
diff --git a/source/blender/modifiers/intern/MOD_warp.c b/source/blender/modifiers/intern/MOD_warp.c
index f6585521269..4df71d91e3e 100644
--- a/source/blender/modifiers/intern/MOD_warp.c
+++ b/source/blender/modifiers/intern/MOD_warp.c
@@ -45,6 +45,8 @@
 #include "BKE_texture.h"
 #include "BKE_colortools.h"
 
+#include "DEG_depsgraph.h"
+
 #include "RE_shader_ext.h"
 
 #include "MOD_util.h"
@@ -149,9 +151,11 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
 }
 
 static void warpModifier_do(
-        WarpModifierData *wmd, Object *ob,
+        WarpModifierData *wmd, const ModifierEvalContext *ctx,
         Mesh *mesh, float (*vertexCos)[3], int numVerts)
 {
+	Object *ob = ctx->object;
+	Depsgraph *depsgraph = ctx->depsgraph;
 	float obinv[4][4];
 	float mat_from[4][4];
 	float mat_from_inv[4][4];
@@ -213,7 +217,7 @@ static void warpModifier_do(
 		tex_co = MEM_malloc_arrayN(numVerts, sizeof(*tex_co), "warpModifier_do tex_co");
 		get_texture_coords_mesh((MappingInfoModifierData *)wmd, ob, mesh, vertexCos, tex_co);
 
-		modifier_init_texture(wmd->modifier.scene, wmd->texture);
+		modifier_init_texture(depsgraph, wmd->texture);
 	}
 
 	for (i = 0; i < numVerts; i++) {
@@ -316,7 +320,7 @@ static void deformVerts(
 
 	BLI_assert(mesh_src->totvert == numVerts);
 
-	warpModifier_do((WarpModifierData *)md, ctx->object, mesh_src, vertexCos, numVerts);
+	warpModifier_do((WarpModifierData *)md, ctx, mesh_src, vertexCos, numVerts);
 }
 
 static void deformVertsEM(
@@ -331,7 +335,7 @@ static void deformVertsEM(
 
 	BLI_assert(mesh_src->totvert == numVerts);
 
-	warpModifier_do((WarpModifierData *)md, ctx->object, mesh_src, vertexCos, numVerts);
+	warpModifier_do((WarpModifierData *)md, ctx, mesh_src, vertexCos, numVerts);
 
 	if (!mesh) {
 		BKE_id_free(NULL, mesh_src);
diff --git a/source/blender/modifiers/intern/MOD_wave.c b/source/blender/modifiers/intern/MOD_wave.c
index 43f76c23351..552746634c5 100644
--- a/source/blender/modifiers/intern/MOD_wave.c
+++ b/source/blender/modifiers/intern/MOD_wave.c
@@ -194,7 +194,7 @@ static void waveModifier_do(
 		                     "waveModifier_do tex_co");
 		get_texture_coords_mesh((MappingInfoModifierData *)wmd, ob, mesh, vertexCos, tex_co);
 
-		modifier_init_texture(wmd->modifier.scene, wmd->texture);
+		modifier_init_texture(depsgraph, wmd->texture);
 	}
 
 	if (lifefac != 0.0f) {
diff --git a/source/blender/modifiers/intern/MOD_weightvg_util.c b/source/blender/modifiers/intern/MOD_weightvg_util.c
index 3d7c4bc24d8..a18e12e06ec 100644
--- a/source/blender/modifiers/intern/MOD_weightvg_util.c
+++ b/source/blender/modifiers/intern/MOD_weightvg_util.c
@@ -46,6 +46,8 @@
 #include "BKE_modifier.h"
 #include "BKE_texture.h"          /* Texture masking. */
 
+#include "DEG_depsgraph.h"
+
 #include "MEM_guardedalloc.h"
 #include "MOD_util.h"
 #include "MOD_weightvg_util.h"
@@ -116,11 +118,13 @@ void weightvg_do_map(int num, float *new_w, short falloff_type, CurveMapping *cm
  * XXX The standard "factor" value is assumed in [0.0, 1.0] range. Else, weird results might appear.
  */
 void weightvg_do_mask(
+        const ModifierEvalContext *ctx,
         const int num, const int *indices, float *org_w, const float *new_w,
         Object *ob, Mesh *mesh, const float fact, const char defgrp_name[MAX_VGROUP_NAME],
         Scene *scene, Tex *texture, const int tex_use_channel, const int tex_mapping,
         Object *tex_map_object, const char *tex_uvlayer_name)
 {
+	Depsgraph *depsgraph = ctx->depsgraph;
 	int ref_didx;
 	int i;
 
@@ -148,7 +152,7 @@ void weightvg_do_mask(
 		tex_co = MEM_calloc_arrayN(numVerts, sizeof(*tex_co), "WeightVG Modifier, TEX mode, tex_co");
 		get_texture_coords_mesh(&t_map, ob, mesh, NULL, tex_co);
 
-		modifier_init_texture(scene, texture);
+		modifier_init_texture(depsgraph, texture);
 
 		/* For each weight (vertex), make the mix between org and new weights. */
 		for (i = 0; i < num; ++i) {
diff --git a/source/blender/modifiers/intern/MOD_weightvg_util.h b/source/blender/modifiers/intern/MOD_weightvg_util.h
index 341ea386e76..f69659e46a3 100644
--- a/source/blender/modifiers/intern/MOD_weightvg_util.h
+++ b/source/blender/modifiers/intern/MOD_weightvg_util.h
@@ -35,6 +35,7 @@ struct CurveMapping;
 struct MDeformVert;
 struct MDeformWeight;
 struct Mesh;
+struct ModifierEvalContext;
 struct Object;
 struct Tex;
 struct Scene;
@@ -73,6 +74,7 @@ void weightvg_do_map(int num, float *new_w, short mode, struct CurveMapping *cma
  * XXX The standard "factor" value is assumed in [0.0, 1.0] range. Else, weird results might appear.
  */
 void weightvg_do_mask(
+        const ModifierEvalContext *ctx,
         const int num, const int *indices, float *org_w, const float *new_w, Object *ob,
         struct Mesh *mesh, const float fact, const char defgrp_name[MAX_VGROUP_NAME],
         struct Scene *scene, Tex *texture, const int tex_use_channel, const int tex_mapping,
diff --git a/source/blender/modifiers/intern/MOD_weightvgedit.c b/source/blender/modifiers/intern/MOD_weightvgedit.c
index 068488ecf95..7c71dd5159e 100644
--- a/source/blender/modifiers/intern/MOD_weightvgedit.c
+++ b/source/blender/modifiers/intern/MOD_weightvgedit.c
@@ -254,7 +254,7 @@ static Mesh *applyModifier(
 	}
 
 	/* Do masking. */
-	weightvg_do_mask(numVerts, NULL, org_w, new_w, ctx->object, result, wmd->mask_constant,
+	weightvg_do_mask(ctx, numVerts, NULL, org_w, new_w, ctx->object, result, wmd->mask_constant,
 	                 wmd->mask_defgrp_name, wmd->modifier.scene, wmd->mask_texture,
 	                 wmd->mask_tex_use_channel, wmd->mask_tex_mapping,
 	                 wmd->mask_tex_map_obj, wmd->mask_tex_uvlayer_name);
diff --git a/source/blender/modifiers/intern/MOD_weightvgmix.c b/source/blender/modifiers/intern/MOD_weightvgmix.c
index 448e74371b5..1736bb01951 100644
--- a/source/blender/modifiers/intern/MOD_weightvgmix.c
+++ b/source/blender/modifiers/intern/MOD_weightvgmix.c
@@ -366,7 +366,7 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes
 	}
 
 	/* Do masking. */
-	weightvg_do_mask(numIdx, indices, org_w, new_w, ctx->object, result, wmd->mask_constant,
+	weightvg_do_mask(ctx, numIdx, indices, org_w, new_w, ctx->object, result, wmd->mask_constant,
 	                 wmd->mask_defgrp_name, wmd->modifier.scene, wmd->mask_texture,
 	                 wmd->mask_tex_use_channel, wmd->mask_tex_mapping,
 	                 wmd->mask_tex_map_obj, wmd->mask_tex_uvlayer_name);
diff --git a/source/blender/modifiers/intern/MOD_weightvgproximity.c b/source/blender/modifiers/intern/MOD_weightvgproximity.c
index 6b31ca677cc..64133222c1e 100644
--- a/source/blender/modifiers/intern/MOD_weightvgproximity.c
+++ b/source/blender/modifiers/intern

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list