diff options
-rw-r--r-- | source/blender/blenkernel/BKE_object.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/object.c | 6 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/pointcache.c | 7 | ||||
-rw-r--r-- | source/blender/blenloader/intern/writefile.c | 1 |
4 files changed, 11 insertions, 5 deletions
diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h index f9a3f19df96..72c4c21d587 100644 --- a/source/blender/blenkernel/BKE_object.h +++ b/source/blender/blenkernel/BKE_object.h @@ -173,7 +173,7 @@ void BKE_object_sculpt_modifiers_changed(struct Object *ob); int BKE_object_obdata_texspace_get(struct Object *ob, short **r_texflag, float **r_loc, float **r_size, float **r_rot); int BKE_object_insert_ptcache(struct Object *ob); -// void object_delete_ptcache(struct Object *ob, int index); +void BKE_object_delete_ptcache(struct Object *ob, int index); struct KeyBlock *BKE_object_insert_shape_key(struct Scene *scene, struct Object *ob, const char *name, const bool from_mix); bool BKE_object_is_child_recursive(struct Object *ob_parent, struct Object *ob_child); diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 3d08ec22acb..05365a86828 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -3188,7 +3188,6 @@ int BKE_object_insert_ptcache(Object *ob) return i; } -#if 0 static int pc_findindex(ListBase *listbase, int index) { LinkData *link = NULL; @@ -3198,7 +3197,7 @@ static int pc_findindex(ListBase *listbase, int index) link = listbase->first; while (link) { - if ((int)link->data == index) + if (GET_INT_FROM_POINTER(link->data) == index) return number; number++; @@ -3208,13 +3207,12 @@ static int pc_findindex(ListBase *listbase, int index) return -1; } -void object_delete_ptcache(Object *ob, int index) +void BKE_object_delete_ptcache(Object *ob, int index) { int list_index = pc_findindex(&ob->pc_ids, index); LinkData *link = BLI_findlink(&ob->pc_ids, list_index); BLI_freelinkN(&ob->pc_ids, link); } -#endif /* shape key utility function */ diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c index 7b3539db287..271160a54f0 100644 --- a/source/blender/blenkernel/intern/pointcache.c +++ b/source/blender/blenkernel/intern/pointcache.c @@ -3483,6 +3483,13 @@ void BKE_ptcache_toggle_disk_cache(PTCacheID *pid) BKE_ptcache_id_time(pid, NULL, 0.0f, NULL, NULL, NULL); BKE_ptcache_update_info(pid); + + if ((cache->flag & PTCACHE_DISK_CACHE) == 0) { + if (cache->index) { + BKE_object_delete_ptcache(pid->ob, cache->index); + cache->index = -1; + } + } } void BKE_ptcache_disk_cache_rename(PTCacheID *pid, const char *name_src, const char *name_dst) diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index 0b582dacc5c..129e9800ee4 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -1542,6 +1542,7 @@ static void write_objects(WriteData *wd, ListBase *idbase) write_particlesystems(wd, &ob->particlesystem); write_modifiers(wd, &ob->modifiers); + writelist(wd, DATA, "LinkData", &ob->pc_ids); writelist(wd, DATA, "LodLevel", &ob->lodlevels); } ob= ob->id.next; |