Writefile: Cleanup Nodetree runtime data.
authorBastien Montagne <b.mont29@gmail.com>
Wed, 1 Apr 2020 10:01:27 +0000 (12:01 +0200)
committerBastien Montagne <b.mont29@gmail.com>
Wed, 1 Apr 2020 10:39:06 +0000 (12:39 +0200)
Note: As with collections, this does not affect embedded nodetrees from
material etc. We prpbably need to tackle those as well at some point...

source/blender/blenloader/intern/writefile.c

index 3b7ce3bdc1b943f144d4136723124d7442e32823..fb6bd637a3b56b7c15025f2fb9ce19906337e21f 100644 (file)
@@ -3272,6 +3272,14 @@ static void write_probe(WriteData *wd, LightProbe *prb, const void *id_address)
 static void write_nodetree(WriteData *wd, bNodeTree *ntree, const void *id_address)
 {
   if (ntree->id.us > 0 || wd->use_memfile) {
+    /* Clean up, important in undo case to reduce false detection of changed datablocks. */
+    ntree->init = 0; /* to set callbacks and force setting types */
+    ntree->is_updating = false;
+    ntree->typeinfo = NULL;
+    ntree->interface_type = NULL;
+    ntree->progress = NULL;
+    ntree->execdata = NULL;
+
     writestruct_at_address(wd, ID_NT, bNodeTree, 1, id_address, ntree);
     /* Note that trees directly used by other IDs (materials etc.) are not 'real' ID, they cannot
      * be linked, etc., so we write actual id data here only, for 'real' ID trees. */