[Bf-blender-cvs] [7bd6590594d] temp-dynamic-overrides: Merge remote-tracking branch 'origin/blender2.8' into temp-dynamic-overrides

Dalai Felinto noreply at git.blender.org
Fri May 25 18:04:25 CEST 2018


Commit: 7bd6590594d578c4700fbc3d61019770098a57ec
Author: Dalai Felinto
Date:   Fri May 25 17:37:52 2018 +0200
Branches: temp-dynamic-overrides
https://developer.blender.org/rB7bd6590594d578c4700fbc3d61019770098a57ec

Merge remote-tracking branch 'origin/blender2.8' into temp-dynamic-overrides

Big merge, this addresses all the conflicts due to the Group > Collection change.

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



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

diff --cc source/blender/blenkernel/BKE_layer.h
index 56bfdc26c80,60204d177f2..813f737e582
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@@ -42,21 -43,16 +43,20 @@@ extern "C" 
  #define ROOT_PROP "root"
  
  struct Base;
+ struct Collection;
  struct Depsgraph;
 +struct DynamicOverrideProperty;
- struct Group;
  struct ID;
  struct IDProperty;
  struct LayerCollection;
  struct ListBase;
  struct Main;
  struct Object;
 +struct OverrideSet;
 +struct PointerRNA;
 +struct PropertyRNA;
  struct RenderEngine;
  struct Scene;
- struct SceneCollection;
  struct ViewLayer;
  struct WorkSpace;
  
@@@ -75,9 -70,7 +74,8 @@@ void BKE_view_layer_free_ex(struct View
  void BKE_view_layer_selected_objects_tag(struct ViewLayer *view_layer, const int tag);
  
  struct Object *BKE_view_layer_camera_find(struct ViewLayer *view_layer);
- struct ViewLayer *BKE_view_layer_first_from_id(const struct ID *owner_id);
- struct ViewLayer *BKE_view_layer_find_from_collection(const struct ID *owner_id, struct LayerCollection *lc);
- struct ViewLayer *BKE_view_layer_find_from_override_set(const struct ID *owner_id, struct OverrideSet *override_set);
++struct ViewLayer *BKE_view_layer_find_from_override_set(const struct Scene *scene, struct OverrideSet *override_set);
+ struct ViewLayer *BKE_view_layer_find_from_collection(const struct Scene *scene, struct LayerCollection *lc);
  struct Base *BKE_view_layer_base_find(struct ViewLayer *view_layer, struct Object *ob);
  void BKE_view_layer_base_deselect_all(struct ViewLayer *view_layer);
  void BKE_view_layer_base_select(struct ViewLayer *view_layer, struct Base *selbase);
@@@ -130,28 -109,14 +114,33 @@@ bool BKE_layer_collection_objects_selec
  
  /* override */
  
- void BKE_override_view_layer_datablock_add(struct ViewLayer *view_layer, int id_type, const char *data_path, const struct ID *owner_id);
- void BKE_override_view_layer_int_add(struct ViewLayer *view_layer, int id_type, const char *data_path, const int value);
+ void BKE_override_view_layer_datablock_add(
+         struct ViewLayer *view_layer, int id_type, const char *data_path, const struct ID *owner_id);
+ void BKE_override_view_layer_int_add(
+         struct ViewLayer *view_layer, int id_type, const char *data_path, const int value);
  
- void BKE_override_layer_collection_boolean_add(struct LayerCollection *layer_collection, int id_type, const char *data_path, const bool value);
+ void BKE_override_layer_collection_boolean_add(
+         struct LayerCollection *layer_collection, int id_type, const char *data_path, const bool value);
  
 +/* Dynamic override. */
 +
 +struct OverrideSet *BKE_view_layer_override_set_add(struct ViewLayer *view_layer, const char *name);
 +bool BKE_view_layer_override_set_remove(struct ViewLayer *view_layer, struct OverrideSet *override_set);
- bool BKE_view_layer_override_set_collection_link(struct OverrideSet *override_set, struct SceneCollection *collection);
- bool BKE_view_layer_override_set_collection_unlink(struct OverrideSet *override_set, struct SceneCollection *collection);
++bool BKE_view_layer_override_set_collection_link(struct OverrideSet *override_set, struct Collection *collection);
++bool BKE_view_layer_override_set_collection_unlink(struct OverrideSet *override_set, struct Collection *collection);
++
++void BKE_dynamic_overrides_remove_collection(struct Main *bmain, struct Collection *old_collection);
 +
 +struct DynamicOverrideProperty *BKE_view_layer_override_property_add(
 +        struct OverrideSet *override_set,
 +        struct PointerRNA *ptr,
 +        struct PropertyRNA *prop,
 +        const int index);
 +
 +bool BKE_view_layer_override_property_remove(
 +        struct OverrideSet *override_set,
 +        struct DynamicOverrideProperty *dyn_prop);
 +
  /* evaluation */
  
  void BKE_layer_eval_view_layer(
diff --cc source/blender/blenkernel/intern/layer.c
index 70145754140,3a6d599ccd3..b5a350a6234
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@@ -59,21 -60,47 +60,51 @@@
  
  #include "DRW_engine.h"
  
 +#include "RNA_access.h"
 +
  #include "MEM_guardedalloc.h"
  
+ 
  /* prototype */
- struct EngineSettingsCB_Type;
- static void layer_collections_sync_flags(ListBase *layer_collections_dst, const ListBase *layer_collections_src);
- static void layer_collection_free(ViewLayer *view_layer, LayerCollection *lc);
- static void layer_collection_objects_populate(ViewLayer *view_layer, LayerCollection *lc, ListBase *objects);
- static LayerCollection *layer_collection_add(ViewLayer *view_layer, LayerCollection *parent, SceneCollection *sc);
- static LayerCollection *find_layer_collection_by_scene_collection(LayerCollection *lc, const SceneCollection *sc);
 +static void override_set_copy_data(struct OverrideSet *override_set_dst, struct OverrideSet *override_set_src);
 +static void override_set_free(struct OverrideSet *override_set);
  static void object_bases_iterator_next(BLI_Iterator *iter, const int flag);
  
+ 
+ /*********************** Layer Collections and bases *************************/
+ 
+ static LayerCollection *layer_collection_add(ListBase *lb_parent, Collection *collection)
+ {
+ 	LayerCollection *lc = MEM_callocN(sizeof(LayerCollection), "Collection Base");
+ 	lc->collection = collection;
+ 	BLI_addtail(lb_parent, lc);
+ 
+ 	return lc;
+ }
+ 
+ static void layer_collection_free(ViewLayer *view_layer, LayerCollection *lc)
+ {
+ 	if (lc == view_layer->active_collection) {
+ 		view_layer->active_collection = view_layer->layer_collections.first;
+ 	}
+ 
+ 	for (LayerCollection *nlc = lc->layer_collections.first; nlc; nlc = nlc->next) {
+ 		layer_collection_free(view_layer, nlc);
+ 	}
+ 
+ 	BLI_freelistN(&lc->layer_collections);
+ }
+ 
+ static Base *object_base_new(Object *ob)
+ {
+ 	Base *base = MEM_callocN(sizeof(Base), "Object Base");
+ 	base->object = ob;
+ 	return base;
+ }
+ 
+ /********************************* View Layer ********************************/
+ 
+ 
  /* RenderLayer */
  
  /* Returns the default view layer to view in workspaces if there is
@@@ -294,54 -284,43 +293,56 @@@ Object *BKE_view_layer_camera_find(View
  /**
   * Find the ViewLayer a LayerCollection belongs to
   */
- ViewLayer *BKE_view_layer_find_from_collection(const ID *owner_id, LayerCollection *lc)
+ ViewLayer *BKE_view_layer_find_from_collection(const Scene *scene, LayerCollection *lc)
  {
- 	switch (GS(owner_id->name)) {
- 		case ID_GR:
- 			return ((Group *)owner_id)->view_layer;
- 		case ID_SCE:
- 		{
- 			Scene *scene = (Scene *)owner_id;
- 			for (ViewLayer *view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
- 				if (find_scene_collection_in_scene_collections(&view_layer->layer_collections, lc)) {
- 					return view_layer;
- 				}
- 			}
- 			return NULL;
+ 	for (ViewLayer *view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
+ 		if (find_scene_collection_in_scene_collections(&view_layer->layer_collections, lc)) {
+ 			return view_layer;
  		}
- 		default:
- 			BLI_assert(!"ID doesn't support scene layers");
- 			return NULL;
  	}
+ 
+ 	return NULL;
  }
  
 +/**
 + * Return the view layer that owns the override set
 + */
- ViewLayer *BKE_view_layer_find_from_override_set(const ID *owner_id, OverrideSet *override_set)
++ViewLayer *BKE_view_layer_find_from_override_set(const Scene *scene, OverrideSet *override_set)
 +{
- 	switch (GS(owner_id->name)) {
- 		case ID_SCE:
- 		{
- 			Scene *scene = (Scene *)owner_id;
- 			for (ViewLayer *view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
- 				if (BLI_findindex(&view_layer->override_sets, override_set) != -1) {
- 					return view_layer;
- 				}
- 			}
- 			return NULL;
++	for (ViewLayer *view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
++		if (BLI_findindex(&view_layer->override_sets, override_set) != -1) {
++			return view_layer;
 +		}
- 		default:
- 			BLI_assert(!"ID doesn't support override sets");
- 			return NULL;
 +	}
++	return NULL;
 +}
 +
  /* Base */
  
+ static void view_layer_bases_hash_create(ViewLayer *view_layer)
+ {
+ 	static ThreadMutex hash_lock = BLI_MUTEX_INITIALIZER;
+ 
+ 	if (!view_layer->object_bases_hash) {
+ 		BLI_mutex_lock(&hash_lock);
+ 
+ 		view_layer->object_bases_hash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, __func__);
+ 
+ 		for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ 			BLI_ghash_insert(view_layer->object_bases_hash, base->object, base);
+ 		}
+ 
+ 		BLI_mutex_unlock(&hash_lock);
+ 	}
+ }
+ 
  Base *BKE_view_layer_base_find(ViewLayer *view_layer, Object *ob)
  {
- 	return BLI_findptr(&view_layer->object_bases, ob, offsetof(Base, object));
+ 	if (!view_layer->object_bases_hash) {
+ 		view_layer_bases_hash_create(view_layer);
+ 	}
+ 
+ 	return BLI_ghash_lookup(view_layer->object_bases_hash, ob);
  }
  
  void BKE_view_layer_base_deselect_all(ViewLayer *view_layer)
@@@ -522,85 -392,28 +414,38 @@@ void BKE_view_layer_copy_data
  		}
  	}
  
 +	BLI_duplicatelist(&view_layer_dst->override_sets, &view_layer_src->override_sets);
 +	OverrideSet *override_set_dst, *override_set_src;
 +	for (override_set_dst = view_layer_dst->override_sets.first,
 +	     override_set_src = view_layer_src->override_sets.first;
 +	     override_set_dst != NULL;
 +	     override_set_dst = override_set_dst->next, override_set_src = override_set_src->next)
 +	{
 +		override_set_copy_data(override_set_dst, override_set_src);
 +	}
 +
- 	view_layer_dst->object_bases_array = NULL;
- }
- 
- /**
-  * Find and return the ListBase of LayerCollection that has \a lc_child as one of its directly
-  * nested LayerCollection.
-  *
-  * \param lb_parent Initial ListBase of LayerCollection to look into recursively
-  * usually the view layer's collection list
-  */
- static ListBase *find_layer_collection_parent_list_base(ListBase *lb_parent, const LayerCollection *lc_child)
- {
- 	for (LayerCollection *lc_nested = lb_parent->first; lc_nested; lc_nested = lc_nested->next) {
- 		if (lc_nested == lc_child) {
- 			return lb_parent;
- 		}
+ 	layer_collections_copy_data(&view_layer_dst->layer_collections, &v

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list