[Bf-blender-cvs] [2cc420f409] id_override_static: Merge branch 'master' into id_override_static

Bastien Montagne noreply at git.blender.org
Tue Jan 31 11:51:05 CET 2017


Commit: 2cc420f409c9fc9b252214a917c38e1356120d5b
Author: Bastien Montagne
Date:   Tue Jan 31 11:46:34 2017 +0100
Branches: id_override_static
https://developer.blender.org/rB2cc420f409c9fc9b252214a917c38e1356120d5b

Merge branch 'master' into id_override_static

Conflicts:
	source/blender/blenkernel/intern/library_query.c

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



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

diff --cc source/blender/blenkernel/BKE_library.h
index 26f9b83cb3,72ae2cf4ef..a8d77c77bf
--- a/source/blender/blenkernel/BKE_library.h
+++ b/source/blender/blenkernel/BKE_library.h
@@@ -85,9 -85,8 +85,9 @@@ void BKE_id_make_local_generic(struct M
  bool id_make_local(struct Main *bmain, struct ID *id, const bool test, const bool force_local);
  bool id_single_user(struct bContext *C, struct ID *id, struct PointerRNA *ptr, struct PropertyRNA *prop);
  bool id_copy(struct Main *bmain, struct ID *id, struct ID **newid, bool test);
 +void BKE_id_swap(struct ID *id_a, struct ID *id_b);
  void id_sort_by_name(struct ListBase *lb, struct ID *id);
- void BKE_id_expand_local(struct ID *id);
+ void BKE_id_expand_local(struct Main *bmain, struct ID *id);
  void BKE_id_copy_ensure_local(struct Main *bmain, struct ID *old_id, struct ID *new_id);
  
  bool new_id(struct ListBase *lb, struct ID *id, const char *name);
diff --cc source/blender/blenkernel/intern/library_query.c
index 40943df0b5,9685f1f5af..1c7ec3cfc0
--- a/source/blender/blenkernel/intern/library_query.c
+++ b/source/blender/blenkernel/intern/library_query.c
@@@ -313,13 -321,21 +321,25 @@@ void BKE_library_foreach_ID_link(Main *
  #define CALLBACK_INVOKE(check_id_super, cb_flag) \
  	FOREACH_CALLBACK_INVOKE(&data, check_id_super, cb_flag)
  
 +	if (id->override) {
- 		CALLBACK_INVOKE_ID(id->override->reference, IDWALK_USER);
++		CALLBACK_INVOKE_ID(id->override->reference, IDWALK_CB_USER);
 +	}
 +
- 	do {
+ 	for (; id != NULL; id = (flag & IDWALK_RECURSE) ? BLI_LINKSTACK_POP(data.ids_todo) : NULL) {
  		data.self_id = id;
- 		data.cd_flag = ID_IS_LINKED_DATABLOCK(id) ? IDWALK_INDIRECT_USAGE : 0;
+ 		data.cb_flag = ID_IS_LINKED_DATABLOCK(id) ? IDWALK_CB_INDIRECT_USAGE : 0;
+ 
+ 		if (bmain != NULL && bmain->relations != NULL && (flag & IDWALK_READONLY)) {
+ 			/* Note that this is minor optimization, even in worst cases (like id being an object with lots of
+ 			 * drivers and constraints and modifiers, or material etc. with huge node tree),
+ 			 * but we might as well use it (Main->relations is always assumed valid, it's responsability of code
+ 			 * creating it to free it, especially if/when it starts modifying Main database). */
+ 			MainIDRelationsEntry *entry = BLI_ghash_lookup(bmain->relations->id_user_to_used, id);
+ 			for (; entry != NULL; entry = entry->next) {
+ 				FOREACH_CALLBACK_INVOKE_ID_PP(&data, entry->id_pointer, entry->usage_flag);
+ 			}
+ 			continue;
+ 		}
  
  		AnimData *adt = BKE_animdata_from_id(id);
  		if (adt) {




More information about the Bf-blender-cvs mailing list