Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/blenloader/intern/writefile.c')
-rw-r--r--source/blender/blenloader/intern/writefile.c37
1 files changed, 34 insertions, 3 deletions
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 23d9d04ce3b..704215aaa7e 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -124,6 +124,7 @@ Important to know is that 'streaming' has been added to files, for Blender Publi
#include "DNA_material_types.h"
#include "DNA_modifier_types.h"
#include "DNA_nla_types.h"
+#include "DNA_node_types.h"
#include "DNA_object_types.h"
#include "DNA_object_force.h"
#include "DNA_oops_types.h"
@@ -153,6 +154,7 @@ Important to know is that 'streaming' has been added to files, for Blender Publi
#include "BKE_global.h" // for G
#include "BKE_library.h" // for set_listbasepointers
#include "BKE_main.h" // G.main
+#include "BKE_node.h"
#include "BKE_packedFile.h" // for packAll
#include "BKE_screen.h" // for waitcursor
#include "BKE_scene.h" // for do_seq
@@ -317,7 +319,7 @@ static void writestruct(WriteData *wd, int filecode, char *structname, int nr, v
BHead bh;
short *sp;
- if(adr==0 || nr==0) return;
+ if(adr==NULL || nr==0) return;
/* init BHead */
bh.code= filecode;
@@ -326,7 +328,7 @@ static void writestruct(WriteData *wd, int filecode, char *structname, int nr, v
bh.SDNAnr= dna_findstruct_nr(wd->sdna, structname);
if(bh.SDNAnr== -1) {
- printf("error: can't find SDNA code %s\n", structname);
+ printf("error: can't find SDNA code <%s>\n", structname);
return;
}
sp= wd->sdna->structs[bh.SDNAnr];
@@ -360,6 +362,33 @@ static void writedata(WriteData *wd, int filecode, int len, void *adr) /* do not
if(len) mywrite(wd, adr, len);
}
+/* this is only direct data */
+static void write_nodetree(WriteData *wd, bNodeTree *ntree)
+{
+ bNode *node;
+ bNodeSocket *sock;
+ bNodeLink *link;
+
+ writestruct(wd, DATA, "bNodeTree", 1, ntree);
+
+ /* for link_list() speed, we write per list */
+
+ for(node= ntree->nodes.first; node; node= node->next)
+ writestruct(wd, DATA, "bNode", 1, node);
+
+ for(node= ntree->nodes.first; node; node= node->next) {
+ if(node->storage)
+ writestruct(wd, DATA, node->typeinfo->storagename, 1, node->storage);
+ for(sock= node->inputs.first; sock; sock= sock->next)
+ writestruct(wd, DATA, "bNodeSocket", 1, sock);
+ for(sock= node->outputs.first; sock; sock= sock->next)
+ writestruct(wd, DATA, "bNodeSocket", 1, sock);
+ }
+
+ for(link= ntree->links.first; link; link= link->next)
+ writestruct(wd, DATA, "bNodeLink", 1, link);
+}
+
static void write_scriptlink(WriteData *wd, ScriptLink *slink)
{
writedata(wd, DATA, sizeof(void *)*slink->totscript, slink->scripts);
@@ -1014,7 +1043,9 @@ static void write_materials(WriteData *wd, ListBase *idbase)
for (ml=ma->layers.first; ml; ml=ml->next)
writestruct(wd, DATA, "MaterialLayer", 1, ml);
-
+
+ if(ma->nodetree)
+ write_nodetree(wd, ma->nodetree);
}
ma= ma->id.next;
}