diff options
Diffstat (limited to 'source/blender/blenloader')
-rw-r--r-- | source/blender/blenloader/intern/readblenentry.c | 8 | ||||
-rw-r--r-- | source/blender/blenloader/intern/readfile.c | 214 | ||||
-rw-r--r-- | source/blender/blenloader/intern/readfile.h | 3 | ||||
-rw-r--r-- | source/blender/blenloader/intern/runtime.c | 1 | ||||
-rw-r--r-- | source/blender/blenloader/intern/undofile.c | 1 | ||||
-rw-r--r-- | source/blender/blenloader/intern/versioning_250.c | 8 | ||||
-rw-r--r-- | source/blender/blenloader/intern/versioning_260.c | 2 | ||||
-rw-r--r-- | source/blender/blenloader/intern/versioning_270.c | 48 | ||||
-rw-r--r-- | source/blender/blenloader/intern/versioning_defaults.c | 18 | ||||
-rw-r--r-- | source/blender/blenloader/intern/versioning_legacy.c | 10 | ||||
-rw-r--r-- | source/blender/blenloader/intern/writefile.c | 10 |
11 files changed, 267 insertions, 56 deletions
diff --git a/source/blender/blenloader/intern/readblenentry.c b/source/blender/blenloader/intern/readblenentry.c index d9bcfc2e8f9..95440158277 100644 --- a/source/blender/blenloader/intern/readblenentry.c +++ b/source/blender/blenloader/intern/readblenentry.c @@ -308,6 +308,9 @@ BlendFileData *BLO_read_from_memfile(Main *oldmain, const char *filename, MemFil /* makes lookup of existing video clips in old main */ blo_make_movieclip_pointer_map(fd, oldmain); + + /* make lookups of existing sound data in old main */ + blo_make_sound_pointer_map(fd, oldmain); /* removed packed data from this trick - it's internal data that needs saves */ @@ -318,7 +321,10 @@ BlendFileData *BLO_read_from_memfile(Main *oldmain, const char *filename, MemFil /* ensures relinked movie clips are not freed */ blo_end_movieclip_pointer_map(fd, oldmain); - + + /* ensures relinked sounds are not freed */ + blo_end_sound_pointer_map(fd, oldmain); + /* move libraries from old main to new main */ if (bfd && mainlist.first != mainlist.last) { diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index ede2e08b396..cd1d63aac5b 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -141,13 +141,9 @@ #include "BKE_treehash.h" #include "BKE_sound.h" -#include "IMB_imbuf.h" // for proxy / timecode versioning stuff #include "NOD_common.h" #include "NOD_socket.h" -#include "NOD_composite.h" -#include "NOD_shader.h" -#include "NOD_texture.h" #include "BLO_readfile.h" #include "BLO_undofile.h" @@ -157,7 +153,6 @@ #include "readfile.h" -#include "PIL_time.h" #include <errno.h> @@ -256,6 +251,12 @@ void blo_reportf_wrap(ReportList *reports, ReportType type, const char *format, } } +/* for reporting linking messages */ +static const char *library_parent_filepath(Library *lib) +{ + return lib->parent ? lib->parent->filepath : "<direct>"; +} + static OldNewMap *oldnewmap_new(void) { OldNewMap *onm= MEM_callocN(sizeof(*onm), "OldNewMap"); @@ -1122,6 +1123,8 @@ void blo_freefiledata(FileData *fd) oldnewmap_free(fd->imamap); if (fd->movieclipmap) oldnewmap_free(fd->movieclipmap); + if (fd->soundmap) + oldnewmap_free(fd->soundmap); if (fd->packedmap) oldnewmap_free(fd->packedmap); if (fd->libmap && !(fd->flags & FD_FLAGS_NOT_MY_LIBMAP)) @@ -1149,6 +1152,9 @@ bool BLO_is_a_library(const char *path, char *dir, char *group) int len; char *fd; + /* if path leads to a directory we can be sure we're not in a library */ + if (BLI_is_dir(path)) return 0; + strcpy(dir, path); len = strlen(dir); if (len < 7) return 0; @@ -1212,6 +1218,13 @@ static void *newmclipadr(FileData *fd, void *adr) /* used to restore movie return NULL; } +static void *newsoundadr(FileData *fd, void *adr) /* used to restore sound data after undo */ +{ + if (fd->soundmap && adr) + return oldnewmap_lookup_and_inc(fd->soundmap, adr, true); + return NULL; +} + static void *newpackedadr(FileData *fd, void *adr) /* used to restore packed data after undo */ { if (fd->packedmap && adr) @@ -1428,6 +1441,37 @@ void blo_end_movieclip_pointer_map(FileData *fd, Main *oldmain) } } +void blo_make_sound_pointer_map(FileData *fd, Main *oldmain) +{ + bSound *sound = oldmain->sound.first; + + fd->soundmap = oldnewmap_new(); + + for (; sound; sound = sound->id.next) { + if (sound->waveform) + oldnewmap_insert(fd->soundmap, sound->waveform, sound->waveform, 0); + } +} + +/* set old main sound caches to zero if it has been restored */ +/* this works because freeing old main only happens after this call */ +void blo_end_sound_pointer_map(FileData *fd, Main *oldmain) +{ + OldNew *entry = fd->soundmap->entries; + bSound *sound = oldmain->sound.first; + int i; + + /* used entries were restored, so we put them to zero */ + for (i = 0; i < fd->soundmap->nentries; i++, entry++) { + if (entry->nr > 0) + entry->newp = NULL; + } + + for (; sound; sound = sound->id.next) { + sound->waveform = newsoundadr(fd, sound->waveform); + } +} + /* XXX disabled this feature - packed files also belong in temp saves and quit.blend, to make restore work */ static void insert_packedmap(FileData *fd, PackedFile *pf) @@ -3210,6 +3254,7 @@ static void direct_link_world(FileData *fd, World *wrld) } wrld->preview = direct_link_preview_image(fd, wrld->preview); + BLI_listbase_clear(&wrld->gpumaterial); } @@ -3304,7 +3349,7 @@ static void direct_link_image(FileData *fd, Image *ima) { /* for undo system, pointers could be restored */ if (fd->imamap) - ima->cache = newmclipadr(fd, ima->cache); + ima->cache = newimaadr(fd, ima->cache); else ima->cache = NULL; @@ -5114,6 +5159,36 @@ static void lib_link_sequence_modifiers(FileData *fd, Scene *scene, ListBase *lb } } +/* check for cyclic set-scene, + * libs can cause this case which is normally prevented, see (T#####) */ +#define USE_SETSCENE_CHECK + +#ifdef USE_SETSCENE_CHECK +/** + * A version of #BKE_scene_validate_setscene with special checks for linked libs. + */ +static bool scene_validate_setscene__liblink(Scene *sce, const int totscene) +{ + Scene *sce_iter; + int a; + + if (sce->set == NULL) return 1; + + for (a = 0, sce_iter = sce; sce_iter->set; sce_iter = sce_iter->set, a++) { + if (sce_iter->id.flag & LIB_NEED_LINK) { + return 1; + } + + if (a > totscene) { + sce->set = NULL; + return 0; + } + } + + return 1; +} +#endif + static void lib_link_scene(FileData *fd, Main *main) { Scene *sce; @@ -5123,6 +5198,11 @@ static void lib_link_scene(FileData *fd, Main *main) TimeMarker *marker; FreestyleModuleConfig *fmc; FreestyleLineSet *fls; + +#ifdef USE_SETSCENE_CHECK + bool need_check_set = false; + int totscene = 0; +#endif for (sce = main->scene.first; sce; sce = sce->id.next) { if (sce->id.flag & LIB_NEED_LINK) { @@ -5268,12 +5348,45 @@ static void lib_link_scene(FileData *fd, Main *main) /* Motion Tracking */ sce->clip = newlibadr_us(fd, sce->id.lib, sce->clip); - - sce->id.flag -= LIB_NEED_LINK; + +#ifdef USE_SETSCENE_CHECK + if (sce->set != NULL) { + /* link flag for scenes with set would be reset later, + * so this way we only check cyclic for newly linked scenes. + */ + need_check_set = true; + } + else { + /* postpone un-setting the flag until we've checked the set-scene */ + sce->id.flag &= ~LIB_NEED_LINK; + } +#else + sce->id.flag &= ~LIB_NEED_LINK; +#endif + } + +#ifdef USE_SETSCENE_CHECK + totscene++; +#endif + } + +#ifdef USE_SETSCENE_CHECK + if (need_check_set) { + for (sce = main->scene.first; sce; sce = sce->id.next) { + if (sce->id.flag & LIB_NEED_LINK) { + sce->id.flag &= ~LIB_NEED_LINK; + if (!scene_validate_setscene__liblink(sce, totscene)) { + printf("Found cyclic background scene when linking %s\n", sce->id.name + 2); + } + } } } +#endif } +#undef USE_SETSCENE_CHECK + + static void link_recurs_seq(FileData *fd, ListBase *lb) { Sequence *seq; @@ -5379,7 +5492,7 @@ static void direct_link_scene(FileData *fd, Scene *sce) } if (sce->ed) { - ListBase *old_seqbasep = &((Editing *)sce->ed)->seqbase; + ListBase *old_seqbasep = &sce->ed->seqbase; ed = sce->ed = newdataadr(fd, sce->ed); @@ -5393,6 +5506,7 @@ static void direct_link_scene(FileData *fd, Scene *sce) seq->seq1= newdataadr(fd, seq->seq1); seq->seq2= newdataadr(fd, seq->seq2); seq->seq3= newdataadr(fd, seq->seq3); + /* a patch: after introduction of effects with 3 input strips */ if (seq->seq3 == NULL) seq->seq3 = seq->seq2; @@ -5562,6 +5676,9 @@ static void direct_link_windowmanager(FileData *fd, wmWindowManager *wm) win->eventstate = NULL; win->curswin = NULL; win->tweak = NULL; +#ifdef WIN32 + win->ime_data = NULL; +#endif BLI_listbase_clear(&win->queue); BLI_listbase_clear(&win->handlers); @@ -5617,6 +5734,21 @@ static void lib_link_windowmanager(FileData *fd, Main *main) /* ****************** READ GREASE PENCIL ***************** */ +/* relink's grease pencil data's refs */ +static void lib_link_gpencil(FileData *fd, Main *main) +{ + bGPdata *gpd; + + for (gpd = main->gpencil.first; gpd; gpd = gpd->id.next) { + if (gpd->id.flag & LIB_NEED_LINK) { + gpd->id.flag -= LIB_NEED_LINK; + + if (gpd->adt) + lib_link_animdata(fd, &gpd->id, gpd->adt); + } + } +} + /* relinks grease-pencil data - used for direct_link and old file linkage */ static void direct_link_gpencil(FileData *fd, bGPdata *gpd) { @@ -5628,6 +5760,10 @@ static void direct_link_gpencil(FileData *fd, bGPdata *gpd) if (gpd == NULL) return; + /* relink animdata */ + gpd->adt = newdataadr(fd, gpd->adt); + direct_link_animdata(fd, gpd->adt); + /* relink layers */ link_list(fd, &gpd->layers); @@ -6698,14 +6834,26 @@ static void direct_link_sound(FileData *fd, bSound *sound) { sound->handle = NULL; sound->playback_handle = NULL; - sound->waveform = NULL; - // versioning stuff, if there was a cache, then we enable caching: + /* versioning stuff, if there was a cache, then we enable caching: */ if (sound->cache) { sound->flags |= SOUND_FLAGS_CACHING; sound->cache = NULL; } + if (fd->soundmap) { + sound->waveform = newsoundadr(fd, sound->waveform); + } + else { + sound->waveform = NULL; + } + + if (sound->mutex) + sound->mutex = BLI_mutex_alloc(); + + /* clear waveform loading flag */ + sound->flags &= ~SOUND_FLAGS_WAVEFORM_LOADING; + sound->packedfile = direct_link_packedfile(fd, sound->packedfile); sound->newpackedfile = direct_link_packedfile(fd, sound->newpackedfile); } @@ -7587,6 +7735,7 @@ static void lib_link_all(FileData *fd, Main *main) lib_link_movieclip(fd, main); lib_link_mask(fd, main); lib_link_linestyle(fd, main); + lib_link_gpencil(fd, main); lib_link_mesh(fd, main); /* as last: tpage images with users at zero */ @@ -8692,6 +8841,12 @@ static void expand_linestyle(FileData *fd, Main *mainvar, FreestyleLineStyle *li } } +static void expand_gpencil(FileData *fd, Main *mainvar, bGPdata *gpd) +{ + if (gpd->adt) + expand_animdata(fd, mainvar, gpd->adt); +} + void BLO_main_expander(void (*expand_doit_func)(void *, Main *, void *)) { expand_doit = expand_doit_func; @@ -8786,6 +8941,9 @@ void BLO_expand_main(void *fdhandle, Main *mainvar) case ID_LS: expand_linestyle(fd, mainvar, (FreestyleLineStyle *)id); break; + case ID_GD: + expand_gpencil(fd, mainvar, (bGPdata *)id); + break; } do_it = true; @@ -9218,8 +9376,10 @@ static void read_libraries(FileData *basefd, ListBase *mainlist) if (mainptr->curlib->packedfile) { PackedFile *pf = mainptr->curlib->packedfile; - blo_reportf_wrap(basefd->reports, RPT_INFO, TIP_("Read packed library: '%s'"), - mainptr->curlib->name); + blo_reportf_wrap( + basefd->reports, RPT_INFO, TIP_("Read packed library: '%s', parent '%s'"), + mainptr->curlib->name, + library_parent_filepath(mainptr->curlib)); fd = blo_openblendermemory(pf->data, pf->size, basefd->reports); @@ -9227,8 +9387,11 @@ static void read_libraries(FileData *basefd, ListBase *mainlist) BLI_strncpy(fd->relabase, mainptr->curlib->filepath, sizeof(fd->relabase)); } else { - blo_reportf_wrap(basefd->reports, RPT_INFO, TIP_("Read library: '%s', '%s'"), - mainptr->curlib->filepath, mainptr->curlib->name); + blo_reportf_wrap( + basefd->reports, RPT_INFO, TIP_("Read library: '%s', '%s', parent '%s'"), + mainptr->curlib->filepath, + mainptr->curlib->name, + library_parent_filepath(mainptr->curlib)); fd = blo_openblenderfile(mainptr->curlib->filepath, basefd->reports); } /* allow typing in a new lib path */ @@ -9299,10 +9462,13 @@ static void read_libraries(FileData *basefd, ListBase *mainlist) append_id_part(fd, mainptr, id, &realid); if (!realid) { - blo_reportf_wrap(fd->reports, RPT_WARNING, - TIP_("LIB ERROR: %s: '%s' missing from '%s'"), - BKE_idcode_to_name(GS(id->name)), - id->name + 2, mainptr->curlib->filepath); + blo_reportf_wrap( + fd->reports, RPT_WARNING, + TIP_("LIB ERROR: %s: '%s' missing from '%s', parent '%s'"), + BKE_idcode_to_name(GS(id->name)), + id->name + 2, + mainptr->curlib->filepath, + library_parent_filepath(mainptr->curlib)); } change_idid_adr(mainlist, basefd, id, realid); @@ -9331,9 +9497,13 @@ static void read_libraries(FileData *basefd, ListBase *mainlist) idn = id->next; if (id->flag & LIB_READ) { BLI_remlink(lbarray[a], id); - blo_reportf_wrap(basefd->reports, RPT_WARNING, - TIP_("LIB ERROR: %s: '%s' unread lib block missing from '%s'"), - BKE_idcode_to_name(GS(id->name)), id->name + 2, mainptr->curlib->filepath); + blo_reportf_wrap( + basefd->reports, RPT_WARNING, + TIP_("LIB ERROR: %s: '%s' unread lib block missing from '%s', parent '%s'"), + BKE_idcode_to_name(GS(id->name)), + id->name + 2, + mainptr->curlib->filepath, + library_parent_filepath(mainptr->curlib)); change_idid_adr(mainlist, basefd, id, NULL); MEM_freeN(id); diff --git a/source/blender/blenloader/intern/readfile.h b/source/blender/blenloader/intern/readfile.h index d56f58d1b37..2b40accbf21 100644 --- a/source/blender/blenloader/intern/readfile.h +++ b/source/blender/blenloader/intern/readfile.h @@ -88,6 +88,7 @@ typedef struct FileData { struct OldNewMap *libmap; struct OldNewMap *imamap; struct OldNewMap *movieclipmap; + struct OldNewMap *soundmap; struct OldNewMap *packedmap; struct BHeadSort *bheadmap; @@ -133,6 +134,8 @@ void blo_make_image_pointer_map(FileData *fd, Main *oldmain); void blo_end_image_pointer_map(FileData *fd, Main *oldmain); void blo_make_movieclip_pointer_map(FileData *fd, Main *oldmain); void blo_end_movieclip_pointer_map(FileData *fd, Main *oldmain); +void blo_make_sound_pointer_map(FileData *fd, Main *oldmain); +void blo_end_sound_pointer_map(FileData *fd, Main *oldmain); void blo_make_packed_pointer_map(FileData *fd, Main *oldmain); void blo_end_packed_pointer_map(FileData *fd, Main *oldmain); void blo_add_library_pointer_map(ListBase *mainlist, FileData *fd); diff --git a/source/blender/blenloader/intern/runtime.c b/source/blender/blenloader/intern/runtime.c index d6fd2f92443..ec496e1c866 100644 --- a/source/blender/blenloader/intern/runtime.c +++ b/source/blender/blenloader/intern/runtime.c @@ -51,7 +51,6 @@ #include "BLO_readfile.h" #include "BLO_runtime.h" -#include "BKE_blender.h" #include "BKE_report.h" /* Runtime reading */ diff --git a/source/blender/blenloader/intern/undofile.c b/source/blender/blenloader/intern/undofile.c index 12f4a295a34..f70d889828f 100644 --- a/source/blender/blenloader/intern/undofile.c +++ b/source/blender/blenloader/intern/undofile.c @@ -40,7 +40,6 @@ #include "DNA_listBase.h" #include "BLI_blenlib.h" -#include "BLI_linklist.h" #include "BLO_undofile.h" diff --git a/source/blender/blenloader/intern/versioning_250.c b/source/blender/blenloader/intern/versioning_250.c index 40b756a3f7c..b71a4029690 100644 --- a/source/blender/blenloader/intern/versioning_250.c +++ b/source/blender/blenloader/intern/versioning_250.c @@ -25,11 +25,10 @@ * \ingroup blenloader */ -#include "zlib.h" - #ifndef WIN32 # include <unistd.h> /* for read close */ #else +# include <zlib.h> /* odd include order-issue */ # include <io.h> // for open close read # include "winsock2.h" # include "BLI_winstuff.h" @@ -90,14 +89,9 @@ #include "NOD_socket.h" #include "BLO_readfile.h" -#include "BLO_undofile.h" - -#include "RE_engine.h" #include "readfile.h" -#include "PIL_time.h" - #include <errno.h> /* 2.50 patch */ diff --git a/source/blender/blenloader/intern/versioning_260.c b/source/blender/blenloader/intern/versioning_260.c index 7c6b6ec7249..7e5127aa407 100644 --- a/source/blender/blenloader/intern/versioning_260.c +++ b/source/blender/blenloader/intern/versioning_260.c @@ -25,8 +25,6 @@ * \ingroup blenloader */ -#include "zlib.h" - #include "BLI_utildefines.h" /* allow readfile to use deprecated functionality */ diff --git a/source/blender/blenloader/intern/versioning_270.c b/source/blender/blenloader/intern/versioning_270.c index d8da0a12b50..372a0b06d01 100644 --- a/source/blender/blenloader/intern/versioning_270.c +++ b/source/blender/blenloader/intern/versioning_270.c @@ -49,13 +49,11 @@ #include "DNA_genfile.h" -#include "BLI_blenlib.h" -#include "BLI_math.h" - #include "BKE_main.h" #include "BKE_node.h" #include "BLI_math.h" +#include "BLI_listbase.h" #include "BLI_string.h" #include "BLO_readfile.h" @@ -114,6 +112,19 @@ static void do_version_constraints_radians_degrees_270_5(ListBase *lb) } } +static void do_version_constraints_stretch_to_limits(ListBase *lb) +{ + bConstraint *con; + + for (con = lb->first; con; con = con->next) { + if (con->type == CONSTRAINT_TYPE_STRETCHTO) { + bStretchToConstraint *data = (bStretchToConstraint *)con->data; + data->bulge_min = 1.0f; + data->bulge_max = 1.0f; + } + } +} + void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *main) { if (!MAIN_VERSION_ATLEAST(main, 270, 0)) { @@ -297,7 +308,7 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *main) { Scene *scene; for (scene = main->scene.first; scene; scene = scene->id.next) { - int num_layers = BLI_countlist(&scene->r.layers); + int num_layers = BLI_listbase_count(&scene->r.layers); scene->r.actlay = min_ff(scene->r.actlay, num_layers - 1); } } @@ -390,7 +401,7 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *main) } } } - + if (!MAIN_VERSION_ATLEAST(main, 272, 1)) { Brush *br; for (br = main->brush.first; br; br = br->id.next) { @@ -399,10 +410,29 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *main) } } - if (!DNA_struct_elem_find(fd->filesdna, "Image", "float", "gen_color")) { - Image *image; - for (image = main->image.first; image != NULL; image = image->id.next) { - image->gen_color[3] = 1.0f; + if (!MAIN_VERSION_ATLEAST(main, 272, 2)) { + if (!DNA_struct_elem_find(fd->filesdna, "Image", "float", "gen_color")) { + Image *image; + for (image = main->image.first; image != NULL; image = image->id.next) { + image->gen_color[3] = 1.0f; + } + } + + if (!DNA_struct_elem_find(fd->filesdna, "bStretchToConstraint", "float", "bulge_min")) { + Object *ob; + + /* Update Transform constraint (again :|). */ + for (ob = main->object.first; ob; ob = ob->id.next) { + do_version_constraints_stretch_to_limits(&ob->constraints); + + if (ob->pose) { + /* Bones constraints! */ + bPoseChannel *pchan; + for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) { + do_version_constraints_stretch_to_limits(&pchan->constraints); + } + } + } } } } diff --git a/source/blender/blenloader/intern/versioning_defaults.c b/source/blender/blenloader/intern/versioning_defaults.c index 1afcac313a2..4732f8578ed 100644 --- a/source/blender/blenloader/intern/versioning_defaults.c +++ b/source/blender/blenloader/intern/versioning_defaults.c @@ -147,6 +147,24 @@ void BLO_update_defaults_startup_blend(Main *bmain) br->imagepaint_tool = PAINT_TOOL_MASK; br->ob_mode |= OB_MODE_TEXTURE_PAINT; } + + /* remove polish brush (flatten/contrast does the same) */ + br = (Brush *)BKE_libblock_find_name_ex(bmain, ID_BR, "Polish"); + if (br) { + BKE_libblock_free(bmain, br); + } + + /* remove brush brush (huh?) from some modes (draw brushes do the same) */ + br = (Brush *)BKE_libblock_find_name_ex(bmain, ID_BR, "Brush"); + if (br) { + BKE_libblock_free(bmain, br); + } + + /* remove draw brush from texpaint (draw brushes do the same) */ + br = (Brush *)BKE_libblock_find_name_ex(bmain, ID_BR, "Draw"); + if (br) { + br->ob_mode &= ~OB_MODE_TEXTURE_PAINT; + } } } diff --git a/source/blender/blenloader/intern/versioning_legacy.c b/source/blender/blenloader/intern/versioning_legacy.c index 557cc147f19..1a1bc3a55be 100644 --- a/source/blender/blenloader/intern/versioning_legacy.c +++ b/source/blender/blenloader/intern/versioning_legacy.c @@ -30,13 +30,12 @@ */ -#include "zlib.h" - #include <limits.h> #ifndef WIN32 # include <unistd.h> // for read close #else +# include <zlib.h> /* odd include order-issue */ # include <io.h> // for open close read # include "winsock2.h" # include "BLI_winstuff.h" @@ -94,14 +93,9 @@ #include "BKE_scene.h" #include "BKE_sequencer.h" -#include "IMB_imbuf.h" // for proxy / timecode versioning stuff - #include "NOD_socket.h" #include "BLO_readfile.h" -#include "BLO_undofile.h" - -#include "RE_engine.h" #include "readfile.h" @@ -3085,7 +3079,7 @@ void blo_do_versions_pre250(FileData *fd, Library *lib, Main *main) BLI_addtail(&ob->particlesystem, psys); md = modifier_new(eModifierType_ParticleSystem); - BLI_snprintf(md->name, sizeof(md->name), "ParticleSystem %i", BLI_countlist(&ob->particlesystem)); + BLI_snprintf(md->name, sizeof(md->name), "ParticleSystem %i", BLI_listbase_count(&ob->particlesystem)); psmd = (ParticleSystemModifierData*) md; psmd->psys = psys; BLI_addtail(&ob->modifiers, md); diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index 59f12657703..bf82a4fa551 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -79,9 +79,8 @@ #include <string.h> #include <stdlib.h> -#include "zlib.h" - #ifdef WIN32 +# include <zlib.h> /* odd include order-issue */ # include "winsock2.h" # include <io.h> # include "BLI_winstuff.h" @@ -163,11 +162,9 @@ #include "BKE_mesh.h" #ifdef USE_NODE_COMPAT_CUSTOMNODES -#include "NOD_common.h" #include "NOD_socket.h" /* for sock->default_value data */ #endif -#include "RNA_access.h" #include "BLO_writefile.h" #include "BLO_readfile.h" @@ -2060,7 +2057,8 @@ static void write_lattices(WriteData *wd, ListBase *idbase) static void write_previews(WriteData *wd, PreviewImage *prv) { - if (prv) { + /* Never write previews in undo steps! */ + if (prv && !wd->current) { short w = prv->w[1]; short h = prv->h[1]; unsigned int *rect = prv->rect[1]; @@ -2468,6 +2466,8 @@ static void write_gpencils(WriteData *wd, ListBase *lb) /* write gpd data block to file */ writestruct(wd, ID_GD, "bGPdata", 1, gpd); + if (gpd->adt) write_animdata(wd, gpd->adt); + /* write grease-pencil layers to file */ writelist(wd, DATA, "bGPDlayer", &gpd->layers); for (gpl= gpd->layers.first; gpl; gpl= gpl->next) { |