[Bf-blender-cvs] [fe41942] asset-engine: Cleanup: move 'virtual lib' linking code into own helper.
Bastien Montagne
noreply at git.blender.org
Tue Jun 14 15:56:55 CEST 2016
Commit: fe41942a90df1dda8f1aad36b5a23662e335b308
Author: Bastien Montagne
Date: Tue Jun 14 15:56:32 2016 +0200
Branches: asset-engine
https://developer.blender.org/rBfe41942a90df1dda8f1aad36b5a23662e335b308
Cleanup: move 'virtual lib' linking code into own helper.
===================================================================
M source/blender/windowmanager/intern/wm_files_link.c
===================================================================
diff --git a/source/blender/windowmanager/intern/wm_files_link.c b/source/blender/windowmanager/intern/wm_files_link.c
index d040019..8d2d1f7 100644
--- a/source/blender/windowmanager/intern/wm_files_link.c
+++ b/source/blender/windowmanager/intern/wm_files_link.c
@@ -221,6 +221,59 @@ static WMLinkAppendDataItem *wm_link_append_data_item_add(
return item;
}
+static void wm_link_virtual_lib(WMLinkAppendData *lapp_data, Main *bmain, AssetEngineType *aet, const int lib_idx)
+{
+ LinkNode *itemlink;
+ int item_idx;
+
+ BLI_assert(aet);
+
+ /* Find or add virtual library matching current asset engine. */
+ Library *virtlib = BKE_library_asset_virtual_ensure(bmain, aet);
+
+ for (item_idx = 0, itemlink = lapp_data->items.list; itemlink; item_idx++, itemlink = itemlink->next) {
+ WMLinkAppendDataItem *item = itemlink->link;
+ ID *new_id = NULL;
+ bool id_exists = false;
+
+ if (!BLI_BITMAP_TEST(item->libraries, lib_idx)) {
+ continue;
+ }
+
+ switch (item->idcode) {
+ case ID_IM:
+ new_id = (ID *)BKE_image_load_exists_ex(item->name, &id_exists);
+ if (id_exists) {
+ if (!new_id->uuid || !ASSETUUID_COMPARE(new_id->uuid, item->uuid)) {
+ /* Fake 'same ID' (same path, but different uuid or whatever), force loading into new ID. */
+ BLI_assert(new_id->lib != virtlib);
+ new_id = (ID *)BKE_image_load(bmain, item->name);
+ id_exists = false;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+
+ if (new_id) {
+ new_id->lib = virtlib;
+ new_id->tag |= LIB_TAG_EXTERN | LIB_ASSET;
+
+ if (!id_exists) {
+ new_id->uuid = MEM_mallocN(sizeof(*new_id->uuid), __func__);
+ *new_id->uuid = *item->uuid;
+ }
+
+ /* If the link is sucessful, clear item's libs 'todo' flags.
+ * This avoids trying to link same item with other libraries to come. */
+ BLI_BITMAP_SET_ALL(item->libraries, false, lapp_data->num_libraries);
+ item->new_id = new_id;
+ }
+ }
+ BKE_libraries_asset_repositories_rebuild(bmain);
+}
+
static void wm_link_do(
WMLinkAppendData *lapp_data, ReportList *reports, Main *bmain, AssetEngineType *aet, Scene *scene, View3D *v3d)
{
@@ -240,51 +293,7 @@ static void wm_link_do(
if (libname[0] == '\0') {
/* Special 'virtual lib' cases. */
- BLI_assert(aet);
-
- /* Find or add virtual library matching current asset engine. */
- Library *virtlib = BKE_library_asset_virtual_ensure(bmain, aet);
-
- for (item_idx = 0, itemlink = lapp_data->items.list; itemlink; item_idx++, itemlink = itemlink->next) {
- WMLinkAppendDataItem *item = itemlink->link;
- ID *new_id = NULL;
- bool id_exists = false;
-
- if (!BLI_BITMAP_TEST(item->libraries, lib_idx)) {
- continue;
- }
-
- switch (item->idcode) {
- case ID_IM:
- new_id = (ID *)BKE_image_load_exists_ex(item->name, &id_exists);
- if (id_exists) {
- if (!new_id->uuid || !ASSETUUID_COMPARE(new_id->uuid, item->uuid)) {
- BLI_assert(new_id->lib != virtlib);
- new_id = (ID *)BKE_image_load(bmain, item->name);
- id_exists = false;
- }
- }
- break;
- default:
- break;
- }
-
- if (new_id) {
- new_id->lib = virtlib;
- new_id->tag |= LIB_TAG_EXTERN | LIB_ASSET;
-
- if (!id_exists) {
- new_id->uuid = MEM_mallocN(sizeof(*new_id->uuid), __func__);
- *new_id->uuid = *item->uuid;
- }
-
- /* If the link is sucessful, clear item's libs 'todo' flags.
- * This avoids trying to link same item with other libraries to come. */
- BLI_BITMAP_SET_ALL(item->libraries, false, lapp_data->num_libraries);
- item->new_id = new_id;
- }
- }
- BKE_libraries_asset_repositories_rebuild(bmain);
+ wm_link_virtual_lib(lapp_data, bmain, aet, lib_idx);
continue;
}
More information about the Bf-blender-cvs
mailing list