[Bf-blender-cvs] [8a92277a31] blender2.8: Layers: Per-Collection edit mode parsing

Dalai Felinto noreply at git.blender.org
Mon Feb 13 00:27:25 CET 2017


Commit: 8a92277a317459a591a7898c5d7927584d1c9718
Author: Dalai Felinto
Date:   Mon Feb 13 00:25:30 2017 +0100
Branches: blender2.8
https://developer.blender.org/rB8a92277a317459a591a7898c5d7927584d1c9718

Layers: Per-Collection edit mode parsing

Note: we are now merging all the collection engines (mode and render), which eventually may get slow. But as stated before, this is to expose the functionality, while waiting for proper depsgraph integrated solution.

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

M	source/blender/blenkernel/BKE_layer.h
M	source/blender/blenkernel/intern/layer.c
M	source/blender/blenkernel/intern/object.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/draw/engines/clay/clay.c
M	source/blender/makesdna/DNA_object_types.h

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

diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h
index e60dddf776..248ceea9b9 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -74,7 +74,7 @@ void BKE_scene_layer_base_flag_recalculate(struct SceneLayer *sl);
 void BKE_scene_layer_engine_settings_recalculate(struct SceneLayer *sl);
 void BKE_scene_layer_engine_settings_object_recalculate(struct SceneLayer *sl, struct Object *ob);
 void BKE_scene_layer_engine_settings_collection_recalculate(struct SceneLayer *sl, struct LayerCollection *lc);
-void BKE_scene_layer_engine_settings_update(struct SceneLayer *sl, const char *engine_name);
+void BKE_scene_layer_engine_settings_update(struct SceneLayer *sl);
 
 void BKE_layer_collection_free(struct SceneLayer *sl, struct LayerCollection *lc);
 
@@ -104,11 +104,13 @@ void BKE_collection_override_datablock_add(struct LayerCollection *lc, const cha
 /* engine settings */
 typedef void (*CollectionEngineSettingsCB)(struct RenderEngine *engine, struct CollectionEngineSettings *ces);
 struct CollectionEngineSettings *BKE_layer_collection_engine_get(struct LayerCollection *lc, const int type, const char *engine_name);
+struct CollectionEngineSettings *BKE_object_collection_engine_get(struct Object *ob, const int type, 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);
 
 struct CollectionEngineSettings *BKE_layer_collection_engine_settings_create(const char *engine_name);
 void BKE_layer_collection_engine_settings_free(struct CollectionEngineSettings *ces);
+void BKE_layer_collection_engine_settings_list_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);
@@ -199,10 +201,10 @@ void BKE_visible_bases_Iterator_end(Iterator *iter);
 }
 
 /* temporary hacky solution waiting for final depsgraph evaluation */
-#define DEG_OBJECT_ITER(sl_, engine_name_, ob_)                               \
+#define DEG_OBJECT_ITER(sl_, ob_)                                             \
 {                                                                             \
 	/* temporary solution, waiting for depsgraph update */                    \
-	BKE_scene_layer_engine_settings_update(sl, engine_name_);                 \
+	BKE_scene_layer_engine_settings_update(sl);                               \
 	                                                                          \
 	/* flush all the data to objects*/                                        \
 	Base *base_;                                                              \
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index cfbce5e0ff..70fb7a21ef 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -53,7 +53,7 @@ static CollectionEngineSettings *collection_engine_settings_create(struct Collec
 static void layer_collection_engine_settings_free(LayerCollection *lc);
 static void layer_collection_create_engine_settings(LayerCollection *lc);
 static void layer_collection_create_mode_settings(LayerCollection *lc);
-static void scene_layer_engine_settings_update(SceneLayer *sl, Object *ob, const char *engine_name);
+static void scene_layer_engine_settings_update(SceneLayer *sl, Object *ob);
 static void object_bases_Iterator_next(Iterator *iter, const int flag);
 
 /* RenderLayer */
@@ -323,7 +323,7 @@ void BKE_scene_layer_engine_settings_collection_recalculate(SceneLayer *sl, Laye
  *
  * Temporary function, waiting for real depsgraph
  */
-void BKE_scene_layer_engine_settings_update(struct SceneLayer *sl, const char *engine_name)
+void BKE_scene_layer_engine_settings_update(struct SceneLayer *sl)
 {
 	if ((sl->flag & SCENE_LAYER_ENGINE_DIRTY) == 0) {
 		return;
@@ -334,7 +334,7 @@ void BKE_scene_layer_engine_settings_update(struct SceneLayer *sl, const char *e
 		if (((base->flag & BASE_DIRTY_ENGINE_SETTINGS) != 0) && \
 		    (base->flag & BASE_VISIBLED) != 0)
 		{
-			scene_layer_engine_settings_update(sl, base->object, engine_name);
+			scene_layer_engine_settings_update(sl, base->object);
 			base->flag &= ~BASE_DIRTY_ENGINE_SETTINGS;
 		}
 	}
@@ -780,12 +780,12 @@ static void layer_collection_engine_settings_free(LayerCollection *lc)
 	for (CollectionEngineSettings *ces = lc->engine_settings.first; ces; ces = ces->next) {
 		BKE_layer_collection_engine_settings_free(ces);
 	}
+	BLI_freelistN(&lc->engine_settings);
 
 	for (CollectionEngineSettings *ces = lc->mode_settings.first; ces; ces = ces->next) {
 		BKE_layer_collection_engine_settings_free(ces);
 	}
-
-	BLI_freelistN(&lc->engine_settings);
+	BLI_freelistN(&lc->mode_settings);
 }
 
 /**
@@ -799,47 +799,52 @@ static void layer_collection_create_engine_settings(LayerCollection *lc)
 	}
 }
 
-static void layer_collection_create_mode_settings_object(LayerCollection *lc)
+static void layer_collection_create_mode_settings_object(ListBase *lb)
 {
 	CollectionEngineSettings *ces;
 
 	ces = MEM_callocN(sizeof(CollectionEngineSettings), "Object Mode Settings");
-	BLI_addtail(&lc->mode_settings, ces);
+	BLI_addtail(lb, ces);
 	ces->type = COLLECTION_MODE_OBJECT;
 
 	/* properties */
 	BKE_collection_engine_property_add_int(ces, "foo", 2);
 }
 
-static void layer_collection_create_mode_settings_edit(LayerCollection *lc)
+static void layer_collection_create_mode_settings_edit(ListBase *lb)
 {
 	CollectionEngineSettings *ces;
 
 	ces = MEM_callocN(sizeof(CollectionEngineSettings), "Edit Mode Settings");
-	BLI_addtail(&lc->mode_settings, ces);
+	BLI_addtail(lb, ces);
 	ces->type = COLLECTION_MODE_EDIT;
 
 	/* properties */
 	BKE_collection_engine_property_add_float(ces, "bar", 0.5);
 }
 
+static void collection_create_mode_settings(ListBase *lb)
+{
+	layer_collection_create_mode_settings_object(lb);
+	layer_collection_create_mode_settings_edit(lb);
+}
+
 static void layer_collection_create_mode_settings(LayerCollection *lc)
 {
-	layer_collection_create_mode_settings_object(lc);
-	layer_collection_create_mode_settings_edit(lc);
+	collection_create_mode_settings(&lc->mode_settings);
 }
 
 /**
- * Return layer collection engine settings for specified engine
+ * Return collection enginne settings for either Object s of LayerCollection s
  */
-CollectionEngineSettings *BKE_layer_collection_engine_get(LayerCollection *lc, const int type, const char *engine_name)
+static CollectionEngineSettings *collection_engine_get(ListBase *lb_render, ListBase *lb_mode, const int type, const char *engine_name)
 {
 	if (type == COLLECTION_MODE_NONE) {
-		return BLI_findstring(&lc->engine_settings, engine_name, offsetof(CollectionEngineSettings, name));
+		return BLI_findstring(lb_render, engine_name, offsetof(CollectionEngineSettings, name));
 	}
 	else {
 		CollectionEngineSettings *ces;
-		for (ces = lc->mode_settings.first; ces; ces = ces->next) {
+		for (ces = lb_mode->first; ces; ces = ces->next) {
 			if (ces->type == type) {
 				return ces;
 			}
@@ -849,6 +854,21 @@ CollectionEngineSettings *BKE_layer_collection_engine_get(LayerCollection *lc, c
 	return NULL;
 }
 
+/**
+ * Return collection engine settings from Object for specified engine of mode
+ */
+CollectionEngineSettings *BKE_object_collection_engine_get(Object *ob, const int type, const char *engine_name)
+{
+	return collection_engine_get(&ob->collection_settings, &ob->collection_settings, type, engine_name);
+}
+/**
+ * Return layer collection engine settings for specified engine
+ */
+CollectionEngineSettings *BKE_layer_collection_engine_get(LayerCollection *lc, const int type, const char *engine_name)
+{
+	return collection_engine_get(&lc->engine_settings, &lc->mode_settings, type, engine_name);
+}
+
 /* ---------------------------------------------------------------------- */
 /* Engine Settings Properties */
 
@@ -929,26 +949,35 @@ void BKE_collection_engine_property_use_set(CollectionEngineSettings *ces, const
 
 /* Engine Settings recalculate  */
 
-static void collection_engine_settings_init(CollectionEngineSettings *ces, const char *engine_name)
+static void collection_engine_settings_init(ListBase *lb)
 {
 	CollectionEngineSettingsCB_Type *ces_type;
-	ces_type = BLI_findstring(&R_engines_settings_callbacks, engine_name, offsetof(CollectionEngineSettingsCB_Type, name));
+	for (ces_type = R_engines_settings_callbacks.first; ces_type; ces_type = ces_type->next) {
+		CollectionEngineSettings *ces = collection_engine_settings_create(ces_type);
+		BLI_strncpy_utf8(ces->name, ces_type->name, sizeof(ces->name));
+		BLI_addtail(lb, ces);
 
-	BLI_listbase_clear(&ces->properties);
-	BLI_strncpy_utf8(ces->name, ces_type->name, sizeof(ces->name));
+		/* call callback */
+		ces_type->callback(NULL, ces);
+	}
 
-	/* call callback */
-	ces_type->callback(NULL, ces);
+	/* edit modes */
+	collection_create_mode_settings(lb);
 }
 
-static void collection_engine_settings_copy(CollectionEngineSettings *ces_dst, CollectionEngineSettings *ces_src)
+static void collection_engine_settings_copy(ListBase *lb_dst, ListBase *lb_src)
 {
-	BLI_strncpy_utf8(ces_dst->name, ces_src->name, sizeof(ces_dst->name));
-	BLI_freelistN(&ces_dst->properties);
+	for (CollectionEngineSettings *ces_src = lb_src->first; ces_src; ces_src = ces_src->next) {
+		CollectionEngineSettings *ces_dst = MEM_callocN(sizeof(CollectionEngineSettings), "CollectionEngineSettings copy");
 
-	for (CollectionEngineProperty *prop = ces_src->properties.first; prop; prop = prop->next) {
-		CollectionEngineProperty *prop_new = MEM_dupallocN(prop);
-		BLI_addtail(&ces_dst->properties, prop_new);
+		BLI_strncpy_utf8(ces_dst->name, ces_src->name, sizeof(ces_dst->name));
+		ces_dst->type = ces_src->type;
+		BLI_addtail(lb_dst, ces_dst);
+
+		for (CollectionEngineProperty *prop = ces_src->properties.first; prop; prop = prop->next) {
+			CollectionEngineProperty *prop_new = MEM_dupallocN(prop);
+			BLI_addtail(&ces_dst->properties, prop_ne

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list