[Bf-blender-cvs] [334b55fd2e8] blender2.8: Extract common modifier parameters into ModifierEvalContext struct

Sybren A. Stüvel noreply at git.blender.org
Tue May 1 18:06:18 CEST 2018


Commit: 334b55fd2e89d66023a499e1ce7f867d9789290d
Author: Sybren A. Stüvel
Date:   Tue May 1 17:33:04 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB334b55fd2e89d66023a499e1ce7f867d9789290d

Extract common modifier parameters into ModifierEvalContext struct

The contents of the ModifierEvalContext struct are constant while iterating
over the modifier stack. The struct thus should be only created once, outside
any loop over the modifiers.

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

M	source/blender/blenkernel/BKE_modifier.h
M	source/blender/blenkernel/intern/DerivedMesh.c
M	source/blender/blenkernel/intern/crazyspace.c
M	source/blender/blenkernel/intern/displist.c
M	source/blender/blenkernel/intern/lattice.c
M	source/blender/blenkernel/intern/modifier.c
M	source/blender/blenkernel/intern/multires.c
M	source/blender/editors/object/object_modifier.c
M	source/blender/modifiers/intern/MOD_armature.c
M	source/blender/modifiers/intern/MOD_array.c
M	source/blender/modifiers/intern/MOD_bevel.c
M	source/blender/modifiers/intern/MOD_boolean.c
M	source/blender/modifiers/intern/MOD_build.c
M	source/blender/modifiers/intern/MOD_cast.c
M	source/blender/modifiers/intern/MOD_cloth.c
M	source/blender/modifiers/intern/MOD_collision.c
M	source/blender/modifiers/intern/MOD_correctivesmooth.c
M	source/blender/modifiers/intern/MOD_curve.c
M	source/blender/modifiers/intern/MOD_datatransfer.c
M	source/blender/modifiers/intern/MOD_decimate.c
M	source/blender/modifiers/intern/MOD_displace.c
M	source/blender/modifiers/intern/MOD_dynamicpaint.c
M	source/blender/modifiers/intern/MOD_edgesplit.c
M	source/blender/modifiers/intern/MOD_explode.c
M	source/blender/modifiers/intern/MOD_fluidsim.c
M	source/blender/modifiers/intern/MOD_hook.c
M	source/blender/modifiers/intern/MOD_laplaciandeform.c
M	source/blender/modifiers/intern/MOD_laplaciansmooth.c
M	source/blender/modifiers/intern/MOD_lattice.c
M	source/blender/modifiers/intern/MOD_mask.c
M	source/blender/modifiers/intern/MOD_meshcache.c
M	source/blender/modifiers/intern/MOD_meshdeform.c
M	source/blender/modifiers/intern/MOD_meshsequencecache.c
M	source/blender/modifiers/intern/MOD_mirror.c
M	source/blender/modifiers/intern/MOD_multires.c
M	source/blender/modifiers/intern/MOD_normal_edit.c
M	source/blender/modifiers/intern/MOD_ocean.c
M	source/blender/modifiers/intern/MOD_particleinstance.c
M	source/blender/modifiers/intern/MOD_particlesystem.c
M	source/blender/modifiers/intern/MOD_remesh.c
M	source/blender/modifiers/intern/MOD_screw.c
M	source/blender/modifiers/intern/MOD_shapekey.c
M	source/blender/modifiers/intern/MOD_shrinkwrap.c
M	source/blender/modifiers/intern/MOD_simpledeform.c
M	source/blender/modifiers/intern/MOD_skin.c
M	source/blender/modifiers/intern/MOD_smoke.c
M	source/blender/modifiers/intern/MOD_smooth.c
M	source/blender/modifiers/intern/MOD_softbody.c
M	source/blender/modifiers/intern/MOD_solidify.c
M	source/blender/modifiers/intern/MOD_subsurf.c
M	source/blender/modifiers/intern/MOD_surface.c
M	source/blender/modifiers/intern/MOD_surfacedeform.c
M	source/blender/modifiers/intern/MOD_triangulate.c
M	source/blender/modifiers/intern/MOD_uvproject.c
M	source/blender/modifiers/intern/MOD_uvwarp.c
M	source/blender/modifiers/intern/MOD_warp.c
M	source/blender/modifiers/intern/MOD_wave.c
M	source/blender/modifiers/intern/MOD_weightvgedit.c
M	source/blender/modifiers/intern/MOD_weightvgmix.c
M	source/blender/modifiers/intern/MOD_weightvgproximity.c
M	source/blender/modifiers/intern/MOD_wireframe.c

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

diff --git a/source/blender/blenkernel/BKE_modifier.h b/source/blender/blenkernel/BKE_modifier.h
index c0203ddc630..02337110289 100644
--- a/source/blender/blenkernel/BKE_modifier.h
+++ b/source/blender/blenkernel/BKE_modifier.h
@@ -127,13 +127,21 @@ typedef enum ModifierApplyFlag {
 	                                */
 } ModifierApplyFlag;
 
-
 typedef struct ModifierUpdateDepsgraphContext {
 	struct Scene *scene;
 	struct Object *object;
 	struct DepsNodeHandle *node;
 } ModifierUpdateDepsgraphContext;
 
+/* Contains the information for deformXXX and applyXXX functions below that
+ * doesn't change between consecutive modifiers. */
+typedef struct ModifierEvalContext {
+	struct Depsgraph *depsgraph;
+	struct Object *object;
+	ModifierApplyFlag flag;
+} ModifierEvalContext;
+
+
 typedef struct ModifierTypeInfo {
 	/* The user visible name for this modifier */
 	char name[32];
@@ -165,26 +173,25 @@ typedef struct ModifierTypeInfo {
 	 * the object it can obtain it from the derivedData argument if non-NULL,
 	 * and otherwise the ob argument.
 	 */
-	void (*deformVerts_DM)(struct ModifierData *md, struct Depsgraph *depsgraph,
-	                    struct Object *ob, struct DerivedMesh *derivedData,
-	                    float (*vertexCos)[3], int numVerts,
-	                    ModifierApplyFlag flag);
+	void (*deformVerts_DM)(struct ModifierData *md, const struct ModifierEvalContext *ctx,
+	                       struct DerivedMesh *derivedData,
+	                       float (*vertexCos)[3], int numVerts);
 
 	/* Like deformMatricesEM but called from object mode (for supporting modifiers in sculpt mode) */
-	void (*deformMatrices_DM)(struct ModifierData *md, struct Depsgraph *depsgraph,
-	                       struct Object *ob, struct DerivedMesh *derivedData,
-	                       float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
+	void (*deformMatrices_DM)(struct ModifierData *md, const struct ModifierEvalContext *ctx,
+	                          struct DerivedMesh *derivedData,
+	                          float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
 
 	/* Like deformVerts but called during editmode (for supporting modifiers)
 	 */
-	void (*deformVertsEM_DM)(struct ModifierData *md, struct Depsgraph *depsgraph,
-	                      struct Object *ob, struct BMEditMesh *editData,
-	                      struct DerivedMesh *derivedData,
-	                      float (*vertexCos)[3], int numVerts);
+	void (*deformVertsEM_DM)(struct ModifierData *md, const struct ModifierEvalContext *ctx,
+	                         struct BMEditMesh *editData,
+	                         struct DerivedMesh *derivedData,
+	                         float (*vertexCos)[3], int numVerts);
 
 	/* Set deform matrix per vertex for crazyspace correction */
-	void (*deformMatricesEM_DM)(struct ModifierData *md, struct Depsgraph *depsgraph,
-	                         struct Object *ob, struct BMEditMesh *editData,
+	void (*deformMatricesEM_DM)(struct ModifierData *md, const struct ModifierEvalContext *ctx,
+	                         struct BMEditMesh *editData,
 	                         struct DerivedMesh *derivedData,
 	                         float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
 
@@ -197,21 +204,11 @@ typedef struct ModifierTypeInfo {
 	 * should read the object data from the derived object instead of the
 	 * actual object data. 
 	 *
-	 * The useRenderParams argument indicates if the modifier is being
-	 * applied in the service of the renderer which may alter quality
-	 * settings.
-	 *
-	 * The isFinalCalc parameter indicates if the modifier is being
-	 * calculated for a final result or for something temporary
-	 * (like orcos). This is a hack at the moment, it is meant so subsurf
-	 * can know if it is safe to reuse its internal cache.
-	 *
 	 * The modifier may reuse the derivedData argument (i.e. return it in
 	 * modified form), but must not release it.
 	 */
-	struct DerivedMesh *(*applyModifier_DM)(struct ModifierData *md, struct Depsgraph *depsgraph,
-	                                     struct Object *ob, struct DerivedMesh *derivedData,
-	                                     ModifierApplyFlag flag);
+	struct DerivedMesh *(*applyModifier_DM)(struct ModifierData *md, const struct ModifierEvalContext *ctx,
+	                                        struct DerivedMesh *derivedData);
 
 	/* Like applyModifier but called during editmode (for supporting
 	 * modifiers).
@@ -220,9 +217,9 @@ typedef struct ModifierTypeInfo {
 	 * are expected from editmode objects. The same qualifications regarding
 	 * derivedData apply as for applyModifier.
 	 */
-	struct DerivedMesh *(*applyModifierEM_DM)(struct ModifierData *md, struct Depsgraph *depsgraph,
-	                                       struct Object *ob, struct BMEditMesh *editData,
-	                                       struct DerivedMesh *derivedData, ModifierApplyFlag flag);
+	struct DerivedMesh *(*applyModifierEM_DM)(struct ModifierData *md, const struct ModifierEvalContext *ctx,
+	                                          struct BMEditMesh *editData,
+	                                          struct DerivedMesh *derivedData);
 
 
 	/********************* Deform modifier functions *********************/
@@ -232,28 +229,23 @@ typedef struct ModifierTypeInfo {
 	 * the object it can obtain it from the mesh argument if non-NULL,
 	 * and otherwise the ob argument.
 	 */
-	void (*deformVerts)(struct ModifierData *md, struct Depsgraph *depsgraph,
-	                    struct Object *ob, struct Mesh *mesh,
-	                    float (*vertexCos)[3], int numVerts,
-	                    ModifierApplyFlag flag);
+	void (*deformVerts)(struct ModifierData *md,  const struct ModifierEvalContext *ctx,
+	                    struct Mesh *mesh, float (*vertexCos)[3], int numVerts);
 
 	/* Like deformMatricesEM but called from object mode (for supporting modifiers in sculpt mode) */
-	void (*deformMatrices)(struct ModifierData *md, struct Depsgraph *depsgraph,
-	                       struct Object *ob, struct Mesh *mesh,
-	                       float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
+	void (*deformMatrices)(struct ModifierData *md,  const struct ModifierEvalContext *ctx,
+	                       struct Mesh *mesh, float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
 
 	/* Like deformVerts but called during editmode (for supporting modifiers)
 	 */
-	void (*deformVertsEM)(struct ModifierData *md, struct Depsgraph *depsgraph,
-	                      struct Object *ob, struct BMEditMesh *editData,
-	                      struct Mesh *mesh,
-	                      float (*vertexCos)[3], int numVerts);
+	void (*deformVertsEM)(struct ModifierData *md,  const struct ModifierEvalContext *ctx,
+	                      struct BMEditMesh *editData,
+	                      struct Mesh *mesh, float (*vertexCos)[3], int numVerts);
 
 	/* Set deform matrix per vertex for crazyspace correction */
-	void (*deformMatricesEM)(struct ModifierData *md, struct Depsgraph *depsgraph,
-	                         struct Object *ob, struct BMEditMesh *editData,
-	                         struct Mesh *mesh,
-	                         float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
+	void (*deformMatricesEM)(struct ModifierData *md,  const struct ModifierEvalContext *ctx,
+	                         struct BMEditMesh *editData,
+	                         struct Mesh *mesh, float (*vertexCos)[3], float (*defMats)[3][3], int numVerts);
 
 	/********************* Non-deform modifier functions *********************/
 
@@ -263,21 +255,11 @@ typedef struct ModifierTypeInfo {
 	 * should read the object data from the mesh object instead of the
 	 * actual object data. 
 	 *
-	 * The useRenderParams argument indicates if the modifier is being
-	 * applied in the service of the renderer which may alter quality
-	 * settings.
-	 *
-	 * The isFinalCalc parameter indicates if the modifier is being
-	 * calculated for a final result or for something temporary
-	 * (like orcos). This is a hack at the moment, it is meant so subsurf
-	 * can know if it is safe to reuse its internal cache.
-	 *
 	 * The modifier may reuse the mesh argument (i.e. return it in
 	 * modified form), but must not release it.
 	 */
-	struct Mesh *(*applyModifier)(struct ModifierData *md, struct Depsgraph *depsgraph,
-	                              struct Object *ob, struct Mesh *mesh,
-	                              ModifierApplyFlag flag);
+	struct Mesh *(*applyModifier)(struct ModifierData *md, const struct ModifierEvalContext *ctx,
+	                              struct Mesh *mesh);
 
 	/* Like applyModifier but called during editmode (for supporting
 	 * modifiers).
@@ -286,9 +268,9 @@ typedef struct ModifierTypeInfo {
 	 * are expected from editmode objects. The same qualifications regarding
 	 * mesh apply as for applyModifier.
 	 */
-	struct Mesh *(*applyModifierEM)(struct ModifierData *md, struct Depsgraph *depsgraph,
-	                                struct Object *ob, struct BMEditMesh *editData,
-	                                struct Mesh *mesh, ModifierApplyFlag flag);
+	struct Mesh *(*applyModifierEM)(struct ModifierData *md, const struct ModifierEvalContext *ctx,
+	                                struct BMEditMesh *editData,
+	                                struct Mesh *mesh);
 
 
 	/********************* Optional functions *********************/
@@ -490,24 +472,20 @@ const char *modifier_path_relbase(struct Object *ob);
 /* wrappers for modifier callbacks that ensure valid normals */
 
 struct DerivedMesh *modwrap_applyModifier(
-        ModifierData *md, struct Depsgraph *depsgraph,
-        struct Object *ob, struct DerivedMesh *dm,
-        ModifierApplyFlag flag);
+        ModifierData *md, const struct ModifierEvalContext *ctx,
+        struct DerivedMesh *dm);
 
 struct DerivedMesh *modwrap_applyModifierEM(
-        ModifierData *md, struct Depsgraph *depsgraph,
-        struct Object *ob, struct BMEditMesh *em,
-        struct DerivedMesh *dm,
-        ModifierApplyFlag flag);
+        ModifierData *md, const struct ModifierEvalContext *ctx,
+        struct BM

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list