[Bf-blender-cvs] [f2f4c4c] asset-engine: WIP more work towards inclusion of asset engine/asset uuids in linking process.

Bastien Montagne noreply at git.blender.org
Tue Jun 2 20:21:12 CEST 2015


Commit: f2f4c4c93d8fa93c95251ca6fd573717df7f7259
Author: Bastien Montagne
Date:   Tue Jun 2 14:04:06 2015 +0200
Branches: asset-engine
https://developer.blender.org/rBf2f4c4c93d8fa93c95251ca6fd573717df7f7259

WIP more work towards inclusion of asset engine/asset uuids in linking process.

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

M	source/blender/blenkernel/intern/library.c
M	source/blender/blenloader/BLO_readfile.h
M	source/blender/blenloader/intern/readfile.c
M	source/blender/makesdna/DNA_ID.h
M	source/blender/windowmanager/intern/wm_operators.c

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

diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c
index 5546fb4..d0454cd 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -1410,6 +1410,7 @@ void id_clear_lib_data(Main *bmain, ID *id)
 	}
 
 	id->lib = NULL;
+	MEM_SAFE_FREE(id->uuid);  /* Local ID have no more use for asset-related data. */
 	id->flag = LIB_LOCAL;
 	new_id(which_libbase(bmain, GS(id->name)), id, NULL);
 
@@ -1420,6 +1421,7 @@ void id_clear_lib_data(Main *bmain, ID *id)
 
 	if (ntree) {
 		ntree->id.lib = NULL;
+		MEM_SAFE_FREE(ntree->id.uuid);
 	}
 }
 
diff --git a/source/blender/blenloader/BLO_readfile.h b/source/blender/blenloader/BLO_readfile.h
index 5f881c0..60dcf8c 100644
--- a/source/blender/blenloader/BLO_readfile.h
+++ b/source/blender/blenloader/BLO_readfile.h
@@ -36,6 +36,8 @@
 extern "C" {
 #endif
 
+struct AssetEngineType;
+struct AssetUUID;
 struct bScreen;
 struct LinkNode;
 struct Main;
@@ -245,6 +247,23 @@ struct ID *BLO_library_append_named_part(
 struct ID *BLO_library_append_named_part_ex(
         const struct bContext *C, struct Main *mainl, BlendHandle **bh,
         const char *idname, const int idcode, const short flag);
+/**
+ * Link/Append a named datablock from an external blend file.
+ * optionally instance the object in the scene when the flags are set.
+ *
+ * \param C The context, when NULL instancing object in the scene isn't done.
+ * \param mainl The main database to link from (not the active one).
+ * \param bh The blender file handle.
+ * \param aet The asset engine type (NULL when no asset engine is used).
+ * \param idname The name of the datablock (without the 2 char ID prefix)
+ * \param idcode The kind of datablock to link.
+ * \param uuid The asset engine's UUID of this datablock (NULL when no asset engine is used).
+ * \param flag Options for linking, used for instancing.
+ * \return the appended ID when found.
+ */
+struct ID *BLO_library_append_named_part_asset(
+        const struct bContext *C, struct Main *mainl, BlendHandle **bh, const struct AssetEngineType *aet,
+        const char *idname, const int idcode, const struct AssetUUID *uuid, const int flag);
 
 void BLO_library_append_end(const struct bContext *C, struct Main *mainl, BlendHandle **bh, int idcode, short flag);
 
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 19d8c79..64fd58c 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -109,10 +109,13 @@
 #include "BLI_threads.h"
 #include "BLI_mempool.h"
 
+#include "RNA_types.h"
+
 #include "BLF_translation.h"
 
 #include "BKE_action.h"
 #include "BKE_armature.h"
+#include "BKE_asset.h"
 #include "BKE_brush.h"
 #include "BKE_cloth.h"
 #include "BKE_constraint.h"
@@ -9342,7 +9345,9 @@ void BLO_library_append_all(Main *mainl, BlendHandle *bh)
 }
 
 
-static ID *append_named_part_ex(const bContext *C, Main *mainl, FileData *fd, const char *idname, const int idcode, const int flag)
+static ID *append_named_part_ex(
+        const bContext *C, Main *mainl, FileData *fd, const AssetEngineType *aet,
+        const char *idname, const int idcode, const AssetUUID *uuid, const int flag)
 {
 	ID *id= append_named_part(mainl, fd, idname, idcode);
 
@@ -9393,7 +9398,15 @@ ID *BLO_library_append_named_part(Main *mainl, BlendHandle **bh, const char *idn
 ID *BLO_library_append_named_part_ex(const bContext *C, Main *mainl, BlendHandle **bh, const char *idname, const int idcode, const short flag)
 {
 	FileData *fd = (FileData*)(*bh);
-	return append_named_part_ex(C, mainl, fd, idname, idcode, flag);
+	return append_named_part_ex(C, mainl, fd, NULL, idname, idcode, NULL, flag);
+}
+
+ID *BLO_library_append_named_part_asset(
+        const bContext *C, Main *mainl, BlendHandle **bh, const AssetEngineType *aet,
+        const char *idname, const int idcode, const AssetUUID *uuid, const int flag)
+{
+	FileData *fd = (FileData*)(*bh);
+	return append_named_part_ex(C, mainl, fd, aet, idname, idcode, uuid, flag);
 }
 
 static void append_id_part(FileData *fd, Main *mainvar, ID *id, ID **r_id)
diff --git a/source/blender/makesdna/DNA_ID.h b/source/blender/makesdna/DNA_ID.h
index fb76f9b..d23e50c 100644
--- a/source/blender/makesdna/DNA_ID.h
+++ b/source/blender/makesdna/DNA_ID.h
@@ -162,8 +162,7 @@ typedef struct Library {
 	ID id;
 	ID *idblock;
 	struct FileData *filedata;
-	/* path name used for reading, can be relative and edited in the outliner.
-     * In case it's an asset engine, it's path from asset engine's 'root'. */
+	/* path name used for reading, can be relative and edited in the outliner. */
 	char name[1024];
 
 	/* absolute filepath, this is only for convenience, 'name' is the real path used on file read but in
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index 159892b..3ad32a7 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -2656,6 +2656,9 @@ static void wm_link_append_do_libgroup(
 	}
 
 	if (name) {
+		/* No uuid/asset-handling here, name is never defined in this case. */
+		BLI_assert(aet == NULL);
+
 		BLO_library_append_named_part_ex(C, mainl, &bh, name, idcode, flag);
 	}
 	else {
@@ -2680,13 +2683,18 @@ static void wm_link_append_do_libgroup(
 				curr_idcode = BKE_idcode_from_name(group);
 
 				if ((idcode == curr_idcode) && (BLI_path_cmp(curr_libname, libname) == 0)) {
-					AssetUUID asset_uuid;
+					if (aet) {
+						AssetUUID asset_uuid;
 
-					RNA_int_get_array(&itemptr, "asset_uuid", asset_uuid.uuid_asset);
-					RNA_int_get_array(&itemptr, "variant_uuid", asset_uuid.uuid_variant);
-					RNA_int_get_array(&itemptr, "revision_uuid", asset_uuid.uuid_revision);
+						RNA_int_get_array(&itemptr, "asset_uuid", asset_uuid.uuid_asset);
+						RNA_int_get_array(&itemptr, "variant_uuid", asset_uuid.uuid_variant);
+						RNA_int_get_array(&itemptr, "revision_uuid", asset_uuid.uuid_revision);
 
-					BLO_library_append_named_part_ex(C, mainl, &bh, name, idcode, flag);
+						BLO_library_append_named_part_asset(C, mainl, &bh, aet, name, idcode, &asset_uuid, flag);
+					}
+					else {
+						BLO_library_append_named_part_ex(C, mainl, &bh, name, idcode, flag);
+					}
 				}
 				else if (is_first_run) {
 					BLI_join_dirfile(path, sizeof(path), curr_libname, group);




More information about the Bf-blender-cvs mailing list