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;
        }

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to