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.c42
1 files changed, 37 insertions, 5 deletions
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index ee914954b90..90873efb5b9 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -1222,6 +1222,31 @@ static void write_lattices(WriteData *wd, ListBase *idbase)
}
}
+static void write_previews(WriteData *wd, PreviewImage *prv)
+{
+ if (prv) {
+ short w = prv->w[1];
+ short h = prv->h[1];
+ unsigned int *rect = prv->rect[1];
+ /* don't write out large previews if not requested */
+ if (!(U.flag & USER_SAVE_PREVIEWS) ) {
+ prv->w[1] = 0;
+ prv->h[1] = 0;
+ prv->rect[1] = NULL;
+ }
+ writestruct(wd, DATA, "PreviewImage", 1, prv);
+ if (prv->rect[0]) writedata(wd, DATA, prv->w[0]*prv->h[0]*sizeof(unsigned int), prv->rect[0]);
+ if (prv->rect[1]) writedata(wd, DATA, prv->w[1]*prv->h[1]*sizeof(unsigned int), prv->rect[1]);
+
+ /* restore preview, we still want to keep it in memory even if not saved to file */
+ if (!(U.flag & USER_SAVE_PREVIEWS) ) {
+ prv->w[1] = w;
+ prv->h[1] = h;
+ prv->rect[1] = rect;
+ }
+ }
+}
+
static void write_images(WriteData *wd, ListBase *idbase)
{
Image *ima;
@@ -1241,12 +1266,9 @@ static void write_images(WriteData *wd, ListBase *idbase)
writedata(wd, DATA, pf->size, pf->data);
}
- if (ima->preview) {
- PreviewImage *prv = ima->preview;
- writestruct(wd, DATA, "PreviewImage", 1, prv);
- writedata(wd, DATA, prv->w*prv->h*sizeof(unsigned int), prv->rect);
+ write_previews(wd, ima->preview);
+
}
- }
ima= ima->id.next;
}
/* flush helps the compression for undo-save */
@@ -1268,6 +1290,8 @@ static void write_textures(WriteData *wd, ListBase *idbase)
if(tex->plugin) writestruct(wd, DATA, "PluginTex", 1, tex->plugin);
if(tex->coba) writestruct(wd, DATA, "ColorBand", 1, tex->coba);
if(tex->env) writestruct(wd, DATA, "EnvMap", 1, tex->env);
+
+ write_previews(wd, tex->preview);
}
tex= tex->id.next;
}
@@ -1307,6 +1331,8 @@ static void write_materials(WriteData *wd, ListBase *idbase)
writestruct(wd, DATA, "bNodeTree", 1, ma->nodetree);
write_nodetree(wd, ma->nodetree);
}
+
+ write_previews(wd, ma->preview);
}
ma= ma->id.next;
}
@@ -1329,6 +1355,9 @@ static void write_worlds(WriteData *wd, ListBase *idbase)
}
write_scriptlink(wd, &wrld->scriptlink);
+
+ write_previews(wd, wrld->preview);
+
}
wrld= wrld->id.next;
}
@@ -1352,6 +1381,9 @@ static void write_lamps(WriteData *wd, ListBase *idbase)
}
write_scriptlink(wd, &la->scriptlink);
+
+ write_previews(wd, la->preview);
+
}
la= la->id.next;
}