[Bf-blender-cvs] [ba4a30c71b] clay-engine: Fix read/writefile.c

Clément Foucault noreply at git.blender.org
Mon Jan 30 14:43:08 CET 2017


Commit: ba4a30c71baffde4af8e94257f2758a1f35aa23b
Author: Clément Foucault
Date:   Mon Jan 30 12:19:51 2017 +0100
Branches: clay-engine
https://developer.blender.org/rBba4a30c71baffde4af8e94257f2758a1f35aa23b

Fix read/writefile.c

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

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

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

diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index a8dc9d0ed8..783eb8fd5f 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -3968,6 +3968,7 @@ static void lib_link_material(FileData *fd, Main *main)
 static void direct_link_material(FileData *fd, Material *ma)
 {
 	int a;
+	MaterialEngineSettings *mes;
 	
 	ma->adt = newdataadr(fd, ma->adt);
 	direct_link_animdata(fd, ma->adt);
@@ -3988,6 +3989,12 @@ static void direct_link_material(FileData *fd, Material *ma)
 	
 	ma->preview = direct_link_preview_image(fd, ma->preview);
 	BLI_listbase_clear(&ma->gpumaterial);
+
+	link_list(fd, &ma->engines_settings);
+	for (mes = ma->engines_settings.first; mes; mes = mes->next) {
+		mes->runtime = NULL;
+		mes->data = newdataadr(fd, mes->data);
+	}
 }
 
 /* ************ READ PARTICLE SETTINGS ***************** */
@@ -6210,12 +6217,12 @@ static void direct_link_scene(FileData *fd, Scene *sce)
 		sl->basact = newdataadr(fd, sl->basact);
 		direct_link_layer_collections(fd, &sl->layer_collections);
 	}
-#if 0
+
 	link_list(fd, &sce->engines_settings);
 	for (res = sce->engines_settings.first; res; res = res->next) {
 		res->runtime = NULL;
+		res->data = newdataadr(fd, res->data);
 	}
-#endif
 }
 
 /* ************ READ WM ***************** */
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 4032dbe9d2..151fd06ed6 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -2468,6 +2468,21 @@ static void write_textures(WriteData *wd, ListBase *idbase)
 	mywrite_flush(wd);
 }
 
+static void write_material_engines_settings(WriteData *wd, ListBase *lb)
+{
+	for (MaterialEngineSettings *res = lb->first; res; res = res->next) {
+		writestruct(wd, DATA, MaterialEngineSettings, 1, res);
+
+		if (STREQ(res->name, RE_engine_id_BLENDER_CLAY)) {
+			writestruct(wd, DATA, MaterialEngineSettingsClay, 1, res->data);
+		}
+		else {
+			/* No engine matched */
+			/* error: don't know how to write this file */
+		}
+	}
+}
+
 static void write_materials(WriteData *wd, ListBase *idbase)
 {
 	Material *ma;
@@ -2504,6 +2519,8 @@ static void write_materials(WriteData *wd, ListBase *idbase)
 			}
 
 			write_previews(wd, ma->preview);
+
+			write_material_engines_settings(wd, &ma->engines_settings);
 		}
 		ma = ma->id.next;
 	}
@@ -2650,6 +2667,21 @@ static void write_layer_collections(WriteData *wd, ListBase *lb)
 	}
 }
 
+static void write_render_engines_settings(WriteData *wd, ListBase *lb)
+{
+	for (RenderEngineSettings *res = lb->first; res; res = res->next) {
+		writestruct(wd, DATA, RenderEngineSettings, 1, res);
+
+		if (STREQ(res->name, RE_engine_id_BLENDER_CLAY)) {
+			writestruct(wd, DATA, RenderEngineSettingsClay, 1, res->data);
+		}
+		else {
+			/* No engine matched */
+			/* error: don't know how to write this file */
+		}
+	}
+}
+
 static void write_scenes(WriteData *wd, ListBase *scebase)
 {
 	Scene *sce;
@@ -2666,7 +2698,6 @@ static void write_scenes(WriteData *wd, ListBase *scebase)
 	FreestyleModuleConfig *fmc;
 	FreestyleLineSet *fls;
 	SceneLayer *sl;
-	RenderEngineSettings *res;
 
 	sce = scebase->first;
 	while (sce) {
@@ -2879,11 +2910,9 @@ static void write_scenes(WriteData *wd, ListBase *scebase)
 			writelist(wd, DATA, ObjectBase, &sl->object_bases);
 			write_layer_collections(wd, &sl->layer_collections);
 		}
-#if 0
-		for (res = sce->engines_settings.first; res; res = res->next) {
-			/* How to write if struct type is not known? */
-		}
-#endif
+
+		write_render_engines_settings(wd, &sce->engines_settings);
+
 		sce = sce->id.next;
 	}




More information about the Bf-blender-cvs mailing list