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:
authorSergey Sharybin <sergey.vfx@gmail.com>2015-06-08 17:08:10 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2015-06-08 17:10:34 +0300
commitf3a434c3212d84d69938edd2f40667627692db14 (patch)
tree366b651e339938a9c6a1f1870dc99776dfed43b8 /source/blender/blenkernel
parent77e18b81226488abd161c80d4a657fa9d75f212f (diff)
parentafe8eb3b59b2989ee387042b98de6ce880d74a6f (diff)
Merge branch 'cycles_memory_experiments' into gooseberry
Conflicts: intern/cycles/blender/blender_object.cpp intern/cycles/blender/blender_sync.h
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/BKE_object.h2
-rw-r--r--source/blender/blenkernel/intern/object.c25
2 files changed, 25 insertions, 2 deletions
diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index 9482ec778d3..8d1fe7640ee 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -67,7 +67,7 @@ void BKE_object_update_base_layer(struct Scene *scene, struct Object *ob);
void BKE_object_free(struct Object *ob);
void BKE_object_free_ex(struct Object *ob, bool do_id_user);
void BKE_object_free_derived_caches(struct Object *ob);
-void BKE_object_free_caches(struct Object *object);
+void BKE_object_free_caches(struct Object *object, bool free_smoke_sim);
void BKE_object_modifier_hook_reset(struct Object *ob, struct HookModifierData *hmd);
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 9a9f176dc46..d8f580a3206 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -111,6 +111,7 @@
#include "BKE_sca.h"
#include "BKE_scene.h"
#include "BKE_sequencer.h"
+#include "BKE_smoke.h"
#include "BKE_speaker.h"
#include "BKE_softbody.h"
#include "BKE_subsurf.h"
@@ -347,7 +348,7 @@ void BKE_object_free_derived_caches(Object *ob)
BKE_object_dupli_cache_clear(ob);
}
-void BKE_object_free_caches(Object *object)
+void BKE_object_free_caches(Object *object, bool free_smoke_sim)
{
ModifierData *md;
short update_flag = 0;
@@ -375,6 +376,28 @@ void BKE_object_free_caches(Object *object)
update_flag |= OB_RECALC_DATA;
}
}
+ else if (md->type == eModifierType_Smoke) {
+ if (free_smoke_sim) {
+ SmokeModifierData *smd = (SmokeModifierData *) md;
+ SmokeDomainSettings *sds = smd->domain;
+ if (sds != NULL) {
+ bool use_sim = sds->point_cache[0] == NULL;
+ PointCache *cache;
+ /* We only reset cache if all the point caches are baked to file. */
+ for (cache = sds->ptcaches[0].first;
+ cache != NULL && use_sim == false;
+ cache = cache->next)
+ {
+ use_sim |= ((cache->flag & (PTCACHE_BAKED|PTCACHE_DISK_CACHE)) != (PTCACHE_BAKED|PTCACHE_DISK_CACHE));
+ }
+ if (!use_sim) {
+ smokeModifier_reset(smd);
+ smokeModifier_reset_turbulence(smd);
+ update_flag |= OB_RECALC_DATA;
+ }
+ }
+ }
+ }
}
/* Tag object for update, so once memory critical operation is over and