[Bf-blender-cvs] [fa2bf9381b] clay-engine: Util function to free CollectionEngineSettings

Dalai Felinto noreply at git.blender.org
Fri Feb 3 12:26:53 CET 2017


Commit: fa2bf9381b8c801b6b32c244d00c1abb1253d47a
Author: Dalai Felinto
Date:   Fri Feb 3 11:56:59 2017 +0100
Branches: clay-engine
https://developer.blender.org/rBfa2bf9381b8c801b6b32c244d00c1abb1253d47a

Util function to free CollectionEngineSettings

This may be run by Depsgraph, as well as internal layercollection free routines

===================================================================

M	source/blender/blenkernel/BKE_layer.h
M	source/blender/blenkernel/intern/layer.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h
index 3fb898fa82..3253c1e5e2 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 6b77b556a1..d64a2ba585 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)




More information about the Bf-blender-cvs mailing list