[Bf-blender-cvs] [cfb7565cd5c] blender2.8: Cleanup: convert smoke modifier from DerivedMesh to Mesh.

Brecht Van Lommel noreply at git.blender.org
Fri Sep 21 13:56:34 CEST 2018


Commit: cfb7565cd5c19e80089d82d7034393342a24f696
Author: Brecht Van Lommel
Date:   Thu Sep 20 12:33:45 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBcfb7565cd5c19e80089d82d7034393342a24f696

Cleanup: convert smoke modifier from DerivedMesh to Mesh.

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

M	source/blender/blenkernel/BKE_mesh.h
M	source/blender/blenkernel/BKE_smoke.h
M	source/blender/blenkernel/intern/DerivedMesh.c
M	source/blender/blenkernel/intern/mesh.c
M	source/blender/blenkernel/intern/multires.c
M	source/blender/blenkernel/intern/smoke.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/makesdna/DNA_smoke_types.h
M	source/blender/modifiers/intern/MOD_particlesystem.c
M	source/blender/modifiers/intern/MOD_smoke.c

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

diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h
index 0d7c4c6f597..a2ac413764c 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -117,8 +117,8 @@ struct Mesh *BKE_mesh_new_nomain_from_template(
         int verts_len, int edges_len, int tessface_len,
         int loops_len, int polys_len);
 
-/* Performs copy for use during evaluation. */
-struct Mesh *BKE_mesh_copy_for_eval(struct Mesh *source);
+/* Performs copy for use during evaluation, optional referencing original arrays to reduce memory. */
+struct Mesh *BKE_mesh_copy_for_eval(struct Mesh *source, bool reference);
 
 /* These functions construct a new Mesh, contrary to BKE_mesh_from_nurbs which modifies ob itself. */
 struct Mesh *BKE_mesh_new_nomain_from_curve(struct Object *ob);
diff --git a/source/blender/blenkernel/BKE_smoke.h b/source/blender/blenkernel/BKE_smoke.h
index 70417b281d3..441751a7a03 100644
--- a/source/blender/blenkernel/BKE_smoke.h
+++ b/source/blender/blenkernel/BKE_smoke.h
@@ -35,9 +35,9 @@
 
 typedef float (*bresenham_callback)(float *result, float *input, int res[3], int *pixel, float *tRay, float correct);
 
-struct DerivedMesh *smokeModifier_do(struct SmokeModifierData *smd, struct Depsgraph *depsgraph,
-                                     struct Scene *scene,
-                                     struct Object *ob, struct DerivedMesh *dm);
+struct Mesh *smokeModifier_do(struct SmokeModifierData *smd, struct Depsgraph *depsgraph,
+                              struct Scene *scene,
+                              struct Object *ob, struct Mesh *dm);
 
 void smoke_reallocate_fluid(struct SmokeDomainSettings *sds, float dx, int res[3], int free_old);
 void smoke_reallocate_highres_fluid(struct SmokeDomainSettings *sds, float dx, int res[3], int free_old);
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index fb4a2bbb0ad..2aad7e75be1 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -1287,7 +1287,7 @@ static Mesh *create_orco_mesh(Object *ob, Mesh *me, BMEditMesh *em, int layer)
 		mesh = BKE_bmesh_to_mesh_nomain(em->bm, &(struct BMeshToMeshParams){0});
 	}
 	else {
-		mesh = BKE_mesh_copy_for_eval(me);
+		mesh = BKE_mesh_copy_for_eval(me, true);
 	}
 
 	orco = get_orco_coords_dm(ob, em, layer, &free);
@@ -2079,7 +2079,7 @@ static void mesh_calc_modifiers(
 		 * coordinates (vpaint, etc.)
 		 */
 		if (r_deform_mesh) {
-			*r_deform_mesh = BKE_mesh_copy_for_eval(me);
+			*r_deform_mesh = BKE_mesh_copy_for_eval(me, true);
 
 			/* XXX: Is build_shapekey_layers ever even true? This should have crashed long ago... */
 			BLI_assert(!build_shapekey_layers);
@@ -2219,7 +2219,7 @@ static void mesh_calc_modifiers(
 				}
 			}
 			else {
-				mesh = BKE_mesh_copy_for_eval(me);
+				mesh = BKE_mesh_copy_for_eval(me, true);
 				ASSERT_IS_VALID_MESH(mesh);
 
 				// XXX: port to Mesh if build_shapekey_layers can ever be true
@@ -2388,7 +2388,7 @@ static void mesh_calc_modifiers(
 #endif
 	}
 	else {
-		final_mesh = BKE_mesh_copy_for_eval(me);
+		final_mesh = BKE_mesh_copy_for_eval(me, true);
 
 		//if (build_shapekey_layers) {
 		//	add_shapekey_layers(final_mesh, me, ob);
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index 525f5d97083..09cd9fdebdc 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -695,16 +695,19 @@ Mesh * BKE_mesh_new_nomain_from_template(
 	        CD_MASK_EVERYTHING);
 }
 
-Mesh *BKE_mesh_copy_for_eval(struct Mesh *source)
+Mesh *BKE_mesh_copy_for_eval(struct Mesh *source, bool reference)
 {
+	int flags = (LIB_ID_CREATE_NO_MAIN |
+	             LIB_ID_CREATE_NO_USER_REFCOUNT |
+	             LIB_ID_CREATE_NO_DEG_TAG |
+	             LIB_ID_COPY_NO_PREVIEW);
+
+	if (reference) {
+		flags |= LIB_ID_COPY_CD_REFERENCE;
+	}
+
 	Mesh *result;
-	BKE_id_copy_ex(
-	        NULL, &source->id, (ID **)&result,
-	        (LIB_ID_CREATE_NO_MAIN |
-	         LIB_ID_CREATE_NO_USER_REFCOUNT |
-	         LIB_ID_CREATE_NO_DEG_TAG |
-	         LIB_ID_COPY_CD_REFERENCE),
-	        false);
+	BKE_id_copy_ex( NULL, &source->id, (ID **)&result, flags, false);
 	return result;
 }
 
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c
index abd4e0d9e7f..24310bfe6ba 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -314,7 +314,7 @@ Mesh *get_multires_mesh(
 	Mesh *result = mti->applyModifier(&mmd->modifier, &modifier_ctx, deformed_mesh);
 
 	if (result == deformed_mesh) {
-		result = BKE_mesh_copy_for_eval(deformed_mesh);
+		result = BKE_mesh_copy_for_eval(deformed_mesh, true);
 	}
 	return result;
 }
diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c
index e9832d723e4..673108a61c0 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -54,6 +54,7 @@
 #include "DNA_constraint_types.h"
 #include "DNA_customdata_types.h"
 #include "DNA_lamp_types.h"
+#include "DNA_mesh_types.h"
 #include "DNA_meshdata_types.h"
 #include "DNA_modifier_types.h"
 #include "DNA_object_types.h"
@@ -65,16 +66,16 @@
 #include "BKE_animsys.h"
 #include "BKE_armature.h"
 #include "BKE_bvhutils.h"
-#include "BKE_cdderivedmesh.h"
 #include "BKE_collision.h"
 #include "BKE_colortools.h"
 #include "BKE_constraint.h"
 #include "BKE_customdata.h"
 #include "BKE_deform.h"
-#include "BKE_DerivedMesh.h"
 #include "BKE_effect.h"
 #include "BKE_global.h"
 #include "BKE_main.h"
+#include "BKE_mesh.h"
+#include "BKE_mesh_runtime.h"
 #include "BKE_modifier.h"
 #include "BKE_object.h"
 #include "BKE_particle.h"
@@ -105,9 +106,9 @@
 
 static ThreadMutex object_update_lock = BLI_MUTEX_INITIALIZER;
 
+struct Mesh;
 struct Object;
 struct Scene;
-struct DerivedMesh;
 struct SmokeModifierData;
 
 // timestep default value for nice appearance 0.1f
@@ -129,7 +130,7 @@ void smoke_initWaveletBlenderRNA(struct WTURBULENCE *UNUSED(wt), float *UNUSED(s
 void smoke_initBlenderRNA(struct FLUID_3D *UNUSED(fluid), float *UNUSED(alpha), float *UNUSED(beta), float *UNUSED(dt_factor), float *UNUSED(vorticity),
                           int *UNUSED(border_colli), float *UNUSED(burning_rate), float *UNUSED(flame_smoke), float *UNUSED(flame_smoke_color),
                           float *UNUSED(flame_vorticity), float *UNUSED(flame_ignition_temp), float *UNUSED(flame_max_temp)) {}
-struct DerivedMesh *smokeModifier_do(SmokeModifierData *UNUSED(smd), struct Depsgraph *UNUSED(depsgraph), Scene *UNUSED(scene), Object *UNUSED(ob), DerivedMesh *UNUSED(dm)) { return NULL; }
+struct Mesh *smokeModifier_do(SmokeModifierData *UNUSED(smd), struct Depsgraph *UNUSED(depsgraph), Scene *UNUSED(scene), Object *UNUSED(ob), Mesh *UNUSED(me)) { return NULL; }
 float smoke_get_velocity_at(struct Object *UNUSED(ob), float UNUSED(position[3]), float UNUSED(velocity[3])) { return 0.0f; }
 
 #endif /* WITH_SMOKE */
@@ -194,20 +195,20 @@ static void smoke_pos_to_cell(SmokeDomainSettings *sds, float pos[3])
 	pos[2] *= 1.0f / sds->cell_size[2];
 }
 
-/* set domain transformations and base resolution from object derivedmesh */
-static void smoke_set_domain_from_derivedmesh(SmokeDomainSettings *sds, Object *ob, DerivedMesh *dm, bool init_resolution)
+/* set domain transformations and base resolution from object mesh */
+static void smoke_set_domain_from_mesh(SmokeDomainSettings *sds, Object *ob, Mesh *me, bool init_resolution)
 {
 	size_t i;
 	float min[3] = {FLT_MAX, FLT_MAX, FLT_MAX}, max[3] = {-FLT_MAX, -FLT_MAX, -FLT_MAX};
 	float size[3];
-	MVert *verts = dm->getVertArray(dm);
+	MVert *verts = me->mvert;
 	float scale = 0.0;
 	int res;
 
 	res = sds->maxres;
 
 	// get BB of domain
-	for (i = 0; i < dm->getNumVerts(dm); i++)
+	for (i = 0; i < me->totvert; i++)
 	{
 		// min BB
 		min[0] = MIN2(min[0], verts[i].co[0]);
@@ -273,14 +274,14 @@ static void smoke_set_domain_from_derivedmesh(SmokeDomainSettings *sds, Object *
 	sds->cell_size[2] /= (float)sds->base_res[2];
 }
 
-static int smokeModifier_init(SmokeModifierData *smd, Object *ob, Scene *scene, DerivedMesh *dm)
+static int smokeModifier_init(SmokeModifierData *smd, Object *ob, Scene *scene, Mesh *me)
 {
 	if ((smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain && !smd->domain->fluid)
 	{
 		SmokeDomainSettings *sds = smd->domain;
 		int res[3];
-		/* set domain dimensions from derivedmesh */
-		smoke_set_domain_from_derivedmesh(sds, ob, dm, true);
+		/* set domain dimensions from mesh */
+		smoke_set_domain_from_mesh(sds, ob, me, true);
 		/* reset domain values */
 		zero_v3_int(sds->shift);
 		zero_v3(sds->shift_f);
@@ -376,7 +377,7 @@ static void smokeModifier_freeFlow(SmokeModifierData *smd)
 {
 	if (smd->flow)
 	{
-		if (smd->flow->dm) smd->flow->dm->release(smd->flow->dm);
+		if (smd->flow->mesh) BKE_id_free(NULL, smd->flow->mesh);
 		if (smd->flow->verts_old) MEM_freeN(smd->flow->verts_old);
 		MEM_freeN(smd->flow);
 		smd->flow = NULL;
@@ -398,9 +399,9 @@ static void smokeModifier_freeCollision(SmokeModifierData *smd)
 			}
 		}
 
-		if (smd->coll->dm)
-			smd->coll->dm->release(smd->coll->dm);
-		smd->coll->dm = NULL;
+		if (smd->coll->mesh)
+			BKE_id_free(NULL, smd->coll->mesh);
+		smd->coll->mesh = NULL;
 
 		MEM_freeN(smd->coll);
 		smd->coll = NULL;
@@ -583,7 +584,7 @@ void smokeModifier_createType(struct SmokeModifierData *smd)
 			smd->flow->color[1] = 0.7f;
 			smd->flow->color[2] = 0.7f;
 
-			smd->flow->dm = NULL;
+			smd->flow->mesh = NULL;
 			smd->flow->psys = NULL;
 
 		}
@@ -598,11 +599,7 @@ void smokeModifier_createType(struct SmokeModifierData *smd)
 			smd->coll->verts_old = NULL;
 			smd->coll->numverts = 0;
 			smd->coll->type = 0; // static obstacle
-			smd->coll->dm = NULL;
-
-#ifdef USE_SMOKE_COLLISION_DM
-			smd->coll->dm = NULL;
-#endif
+			smd->coll->mesh = NULL;
 		}
 	}
 }
@@ -743,7 +740,7 @@ typedef struct ObstaclesFromDMData {
 	int *num_obstacles;
 } ObstaclesFromDMData;
 
-static void obstacles_from_derivedmesh_task_cb(
+static void obstacles_from_mesh_task_cb(
 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list