[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