[Bf-blender-cvs] [e3e29cad3e6] temp-fracture-modifier-2.8: cheap "storage" solution for now, just recreate on load

Martin Felke noreply at git.blender.org
Fri Aug 10 14:01:00 CEST 2018


Commit: e3e29cad3e6deb14c51ea1f726d37b5dfe90a459
Author: Martin Felke
Date:   Fri Aug 10 00:44:54 2018 +0200
Branches: temp-fracture-modifier-2.8
https://developer.blender.org/rBe3e29cad3e6deb14c51ea1f726d37b5dfe90a459

cheap "storage" solution for now, just recreate on load

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

M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/writefile.c
M	source/blender/modifiers/intern/MOD_fracture.c

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

diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index ff14caa0b9d..d72dbff65f8 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -132,7 +132,6 @@
 #include "BKE_curve.h"
 #include "BKE_effect.h"
 #include "BKE_fcurve.h"
-#include "BKE_fracture.h"
 #include "BKE_global.h" // for G
 #include "BKE_gpencil.h"
 #include "BKE_gpencil_modifier.h"
@@ -183,8 +182,6 @@
 
 #include <errno.h>
 
-#include "BKE_cdderivedmesh.h"  //for fracture meshisland handling
-
 /**
  * READ
  * ====
@@ -1989,7 +1986,7 @@ static void *read_struct(FileData *fd, BHead *bh, const char *blockname)
 
 typedef void (*link_list_cb)(FileData *fd, void *data);
 
-static void link_list_ex(FileData *fd, ListBase *lb, link_list_cb callback, bool increase_lasthit)		/* only direct data */
+static void link_list_ex(FileData *fd, ListBase *lb, link_list_cb callback)		/* only direct data */
 {
 	Link *ln, *prev;
 
@@ -2002,7 +1999,7 @@ static void link_list_ex(FileData *fd, ListBase *lb, link_list_cb callback, bool
 	ln = lb->first;
 	prev = NULL;
 	while (ln) {
-		ln->next = newdataadr_ex(fd, ln->next, increase_lasthit);
+		ln->next = newdataadr(fd, ln->next);
 		if (ln->next != NULL && callback != NULL) {
 			callback(fd, ln->next);
 		}
@@ -2015,7 +2012,7 @@ static void link_list_ex(FileData *fd, ListBase *lb, link_list_cb callback, bool
 
 static void link_list(FileData *fd, ListBase *lb)		/* only direct data */
 {
-	link_list_ex(fd, lb, NULL, true);
+	link_list_ex(fd, lb, NULL);
 }
 
 static void link_glob_list(FileData *fd, ListBase *lb)		/* for glob data */
@@ -2324,7 +2321,7 @@ static void direct_link_id_override_property_cb(FileData *fd, void *data)
 	IDOverrideStaticProperty *op = data;
 
 	op->rna_path = newdataadr(fd, op->rna_path);
-    link_list_ex(fd, &op->operations, direct_link_id_override_property_operation_cb, true);
+	link_list_ex(fd, &op->operations, direct_link_id_override_property_operation_cb);
 }
 
 static void direct_link_id(FileData *fd, ID *id)
@@ -2344,7 +2341,7 @@ static void direct_link_id(FileData *fd, ID *id)
 	/* Link direct data of overrides. */
 	if (id->override_static) {
 		id->override_static = newdataadr(fd, id->override_static);
-        link_list_ex(fd, &id->override_static->properties, direct_link_id_override_property_cb, true);
+		link_list_ex(fd, &id->override_static->properties, direct_link_id_override_property_cb);
 	}
 
 	DrawDataList *drawdata = DRW_drawdatalist_from_id(id);
@@ -4250,7 +4247,7 @@ static void direct_link_pointcache_cb(FileData *fd, void *data)
 static void direct_link_pointcache(FileData *fd, PointCache *cache)
 {
 	if ((cache->flag & PTCACHE_DISK_CACHE)==0) {
-		link_list_ex(fd, &cache->mem_cache, direct_link_pointcache_cb, true);
+		link_list_ex(fd, &cache->mem_cache, direct_link_pointcache_cb);
 	}
 	else
 		BLI_listbase_clear(&cache->mem_cache);
@@ -4678,50 +4675,6 @@ static void direct_link_grid_paint_mask(FileData *fd, int count, GridPaintMask *
 	}
 }
 
-/* used with fracture modifier */
-static void direct_link_customdata_fracture(FileData *fd, CustomData *data, int count)
-{
-	/*need to load the dverts here for fracture, so handle this in a special function, normally
-	 *the dverts arent loaded here, for what reason ever.... */
-
-	int i = 0;
-
-	data->layers = newdataadr(fd, data->layers);
-
-	/* annoying workaround for bug [#31079] loading legacy files with
-	 * no polygons _but_ have stale customdata */
-	if (UNLIKELY(count == 0 && data->layers == NULL && data->totlayer != 0)) {
-		CustomData_reset(data);
-		return;
-	}
-
-	data->external = newdataadr(fd, data->external);
-
-	while (i < data->totlayer) {
-		CustomDataLayer *layer = &data->layers[i];
-
-		if (layer->flag & CD_FLAG_EXTERNAL)
-			layer->flag &= ~CD_FLAG_IN_MEMORY;
-
-		layer->flag &= ~CD_FLAG_NOFREE;
-
-		if (CustomData_verify_versions(data, i)) {
-			layer->data = newdataadr(fd, layer->data);
-			if (layer->type == CD_MDISPS)
-				direct_link_mdisps(fd, count, layer->data, layer->flag & CD_FLAG_EXTERNAL);
-			else if (layer->type == CD_GRID_PAINT_MASK)
-				direct_link_grid_paint_mask(fd, count, layer->data);
-			else if (layer->type == CD_MDEFORMVERT) {
-				/* layer types that allocate own memory need special handling */
-				direct_link_dverts(fd, count, layer->data);
-			}
-			i++;
-		}
-	}
-
-	CustomData_update_typemap(data);
-}
-
 /*this isn't really a public api function, so prototyped here*/
 static void direct_link_customdata(FileData *fd, CustomData *data, int count)
 {
@@ -5143,23 +5096,6 @@ static void direct_link_pose(FileData *fd, bPose *pose)
 	}
 }
 
-static void read_shard(FileData *fd, Shard **address )
-{
-	Shard* s = *address;
-	s->mvert = newdataadr(fd, s->mvert);
-	s->mpoly = newdataadr(fd, s->mpoly);
-	s->mloop = newdataadr(fd, s->mloop);
-	s->medge = newdataadr(fd, s->medge);
-
-	direct_link_customdata_fracture(fd, &s->vertData, s->totvert);
-	direct_link_customdata_fracture(fd, &s->loopData, s->totloop);
-	direct_link_customdata_fracture(fd, &s->polyData, s->totpoly);
-	direct_link_customdata_fracture(fd, &s->edgeData, s->totedge);
-
-	s->neighbor_ids = newdataadr(fd, s->neighbor_ids);
-	s->cluster_colors = newdataadr(fd, s->cluster_colors);
-}
-
 static void direct_link_modifiers(FileData *fd, ListBase *lb)
 {
 	ModifierData *md;
@@ -5483,6 +5419,18 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb)
 				}
 			}
 		}
+		else if (md->type == eModifierType_Fracture) {
+			FractureModifierData *fmd = (FractureModifierData *)md;
+
+			/*No storage at all as first "cheap" solution", and re-init after load */
+			fmd->shared = newdataadr(fd, fmd->shared);
+
+			if (!fmd->shared) {
+				fmd->shared = MEM_callocN(sizeof(FractureModifierData_Shared), "shared");
+				fmd->shared->refresh = true;
+				fmd->shared->reset_shards = true;
+			}
+		}
 	}
 }
 
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index eb6f6c6f611..f5f16980a63 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -167,7 +167,6 @@
 #include "BKE_curve.h"
 #include "BKE_collection.h"
 #include "BKE_constraint.h"
-#include "BKE_fracture.h" // for writing a derivedmesh as shard
 #include "BKE_global.h" // for G
 #include "BKE_gpencil_modifier.h"
 #include "BKE_idcode.h"
@@ -1762,7 +1761,7 @@ static void write_modifiers(WriteData *wd, ListBase *modbase)
 
 			if (csmd->bind_coords) {
 				writedata(wd, DATA, sizeof(float[3]) * csmd->bind_coords_num, csmd->bind_coords);
-            }
+			}
 		}
 		else if (md->type == eModifierType_SurfaceDeform) {
 			SurfaceDeformModifierData *smd = (SurfaceDeformModifierData *)md;
diff --git a/source/blender/modifiers/intern/MOD_fracture.c b/source/blender/modifiers/intern/MOD_fracture.c
index e312e27d337..8d28f6407f1 100644
--- a/source/blender/modifiers/intern/MOD_fracture.c
+++ b/source/blender/modifiers/intern/MOD_fracture.c
@@ -161,7 +161,11 @@ static void initData(ModifierData *md)
 	fmd->use_constraint_group = false;
 	fmd->activate_broken = false;
 
-	fmd->shared = MEM_callocN(sizeof(FractureModifierData_Shared), "FractureModifierData_Shared");
+	if (!fmd->shared) {
+		fmd->shared = MEM_callocN(sizeof(FractureModifierData_Shared), "FractureModifierData_Shared");
+		fmd->shared->refresh = true;
+		fmd->shared->reset_shards = true;
+	}
 }
 
 static void freeData(ModifierData *md)
@@ -188,6 +192,7 @@ static void copyData(ModifierData *md, ModifierData *target, const int flag)
 		/* This is a regular copy, and not a CoW copy for depsgraph evaluation */
 		trmd->shared = MEM_callocN(sizeof(FractureModifierData_Shared), "FractureModifierData_Shared");
 		trmd->shared->refresh = true;
+		trmd->shared->reset_shards = true;
 	}
 
 	modifier_copyData_generic(md, target, flag);



More information about the Bf-blender-cvs mailing list