diff options
author | Janne Karhu <jhkarh@gmail.com> | 2011-02-24 16:37:53 +0300 |
---|---|---|
committer | Janne Karhu <jhkarh@gmail.com> | 2011-02-24 16:37:53 +0300 |
commit | acf8a9c6ec58eb5937b78b371396f0acb3a4d639 (patch) | |
tree | a656202a234697e18ef97cdf1864d27f381bb6a5 /source | |
parent | cd615f6fcc143cfd630a8d784ea8d59256cfe84e (diff) |
Fix for [#26197] High resolution smoke cache not available due to pointcache update. Please reset the simulation.
* Backwards compatibility code wasn't forwards compatible :)
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenloader/intern/readfile.c | 9 | ||||
-rw-r--r-- | source/blender/blenloader/intern/writefile.c | 2 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_object_force.h | 2 |
3 files changed, 11 insertions, 2 deletions
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 5737dfd51da..4c5a281e966 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -3963,7 +3963,14 @@ static void direct_link_modifiers(FileData *fd, ListBase *lb) /* Smoke uses only one cache from now on, so store pointer convert */ if(smd->domain->ptcaches[1].first || smd->domain->point_cache[1]) { - printf("High resolution smoke cache not available due to pointcache update. Please reset the simulation.\n"); + if(smd->domain->point_cache[1]) { + PointCache *cache = newdataadr(fd, smd->domain->point_cache[1]); + if(cache->flag & PTCACHE_FAKE_SMOKE) + ; /* Smoke was already saved in "new format" and this cache is a fake one. */ + else + printf("High resolution smoke cache not available due to pointcache update. Please reset the simulation.\n"); + BKE_ptcache_free(cache); + } smd->domain->ptcaches[1].first = NULL; smd->domain->ptcaches[1].last = NULL; smd->domain->point_cache[1] = NULL; diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index 8d0656e45e1..d2d6c2412cd 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -1220,7 +1220,7 @@ static void write_modifiers(WriteData *wd, ListBase *modbase) /* create fake pointcache so that old blender versions can read it */ smd->domain->point_cache[1] = BKE_ptcache_add(&smd->domain->ptcaches[1]); - smd->domain->point_cache[1]->flag |= PTCACHE_DISK_CACHE; + smd->domain->point_cache[1]->flag |= PTCACHE_DISK_CACHE|PTCACHE_FAKE_SMOKE; smd->domain->point_cache[1]->step = 1; write_pointcaches(wd, &(smd->domain->ptcaches[1])); diff --git a/source/blender/makesdna/DNA_object_force.h b/source/blender/makesdna/DNA_object_force.h index 51076dd59a1..37568a22f54 100644 --- a/source/blender/makesdna/DNA_object_force.h +++ b/source/blender/makesdna/DNA_object_force.h @@ -397,6 +397,8 @@ typedef struct SoftBody { #define PTCACHE_READ_INFO 1024 /* dont use the filename of the blendfile the data is linked from (write a local cache) */ #define PTCACHE_IGNORE_LIBPATH 2048 +/* high resolution cache is saved for smoke for backwards compatibility, so set this flag to know it's a "fake" cache */ +#define PTCACHE_FAKE_SMOKE (1<<12) /* PTCACHE_OUTDATED + PTCACHE_FRAMES_SKIPPED */ #define PTCACHE_REDO_NEEDED 258 |