diff options
author | Dalai Felinto <dfelinto@gmail.com> | 2017-02-03 13:56:59 +0300 |
---|---|---|
committer | Dalai Felinto <dfelinto@gmail.com> | 2017-02-03 14:23:01 +0300 |
commit | fa2bf9381b8c801b6b32c244d00c1abb1253d47a (patch) | |
tree | 82ec4e568c28427eca61be29e89684a2f0415da7 | |
parent | e1b13c0fa744f2ebaa0a4a8e23120cc91cde3092 (diff) |
Util function to free CollectionEngineSettings
This may be run by Depsgraph, as well as internal layercollection free routines
-rw-r--r-- | source/blender/blenkernel/BKE_layer.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/layer.c | 20 |
2 files changed, 17 insertions, 5 deletions
diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h index 3fb898fa82c..3253c1e5e29 100644 --- a/source/blender/blenkernel/BKE_layer.h +++ b/source/blender/blenkernel/BKE_layer.h @@ -44,6 +44,7 @@ extern "C" { struct CollectionEngineSettings; struct LayerCollection; struct ID; +struct ListBase; struct Main; struct Object; struct ObjectBase; @@ -98,6 +99,7 @@ typedef void (*CollectionEngineSettingsCB)(struct RenderEngine *engine, struct C struct CollectionEngineSettings *BKE_layer_collection_engine_get(struct LayerCollection *lc, const char *engine_name); void BKE_layer_collection_engine_settings_callback_register(struct Main *bmain, const char *engine_name, CollectionEngineSettingsCB func); void BKE_layer_collection_engine_settings_callback_free(void); +void BKE_layer_collection_engine_settings_free(struct ListBase *lb); void BKE_collection_engine_property_add_float(struct CollectionEngineSettings *ces, const char *name, float value); void BKE_collection_engine_property_add_int(struct CollectionEngineSettings *ces, const char *name, int value); diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c index 6b77b556a1b..d64a2ba585e 100644 --- a/source/blender/blenkernel/intern/layer.c +++ b/source/blender/blenkernel/intern/layer.c @@ -293,16 +293,12 @@ static void layer_collection_free(SceneLayer *sl, LayerCollection *lc) BLI_freelistN(&lc->object_bases); BLI_freelistN(&lc->overrides); + BKE_layer_collection_engine_settings_free(&lc->engine_settings); for (LayerCollection *nlc = lc->layer_collections.first; nlc; nlc = nlc->next) { layer_collection_free(sl, nlc); } - for (CollectionEngineSettings *cse = lc->engine_settings.first; cse; cse = cse->next) { - BLI_freelistN(&cse->properties); - } - BLI_freelistN(&lc->engine_settings); - BLI_freelistN(&lc->layer_collections); } @@ -661,6 +657,20 @@ void BKE_layer_collection_engine_settings_callback_free(void) } /** + * Free the CollectionEngineSettings ListBase + * + * Usually we would pass LayerCollection->engine_settings + * But depsgraph uses this for Object->collection_settings + */ +void BKE_layer_collection_engine_settings_free(ListBase *lb) +{ + for (CollectionEngineSettings *cse = lb->first; cse; cse = cse->next) { + BLI_freelistN(&cse->properties); + } + BLI_freelistN(lb); +} + +/** * Initialize the render settings for a single LayerCollection */ static void layer_collection_create_engine_settings(LayerCollection *lc) |