[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