[Bf-blender-cvs] [42d75801de2] asset-metadata: Remove asset data-block again, back to ID.asset_data design

Julian Eisel noreply at git.blender.org
Thu Jul 9 20:26:38 CEST 2020


Commit: 42d75801de24456569abfb9c0d99686c77379c34
Author: Julian Eisel
Date:   Thu Jul 9 20:19:39 2020 +0200
Branches: asset-metadata
https://developer.blender.org/rB42d75801de24456569abfb9c0d99686c77379c34

Remove asset data-block again, back to ID.asset_data design

So rather than having an asset data-block to reference data-blocks, let
the data-blocks reference asset-data.

After talking to Brecht, it seems that this approach is just fine. I previously
added the data-block type because I saw some benefits (faster & simpler asset
metadata reading, non-data-block assets, better file-browser integration,
simple remapping of referenced data-blocks), but there are ways to do the same
without the data-block. It's a bit more complicated that way, but still very
doable.

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

M	source/blender/blenkernel/BKE_asset.h
M	source/blender/blenkernel/BKE_icons.h
M	source/blender/blenkernel/BKE_idtype.h
M	source/blender/blenkernel/BKE_main.h
M	source/blender/blenkernel/intern/asset.c
M	source/blender/blenkernel/intern/icons.c
M	source/blender/blenkernel/intern/idtype.c
M	source/blender/blenkernel/intern/lib_query.c
M	source/blender/blenkernel/intern/main.c
M	source/blender/blenloader/intern/readblenentry.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/writefile.c
M	source/blender/blentranslation/BLT_translation.h
M	source/blender/editors/asset/asset_ops.c
M	source/blender/editors/interface/interface_icons.c
M	source/blender/editors/interface/interface_templates.c
M	source/blender/editors/render/render_opengl.c
M	source/blender/editors/space_outliner/outliner_draw.c
M	source/blender/editors/space_outliner/outliner_intern.h
M	source/blender/editors/space_outliner/outliner_tools.c
M	source/blender/makesdna/DNA_ID.h
M	source/blender/makesdna/DNA_asset_defaults.h
M	source/blender/makesdna/DNA_asset_types.h
M	source/blender/makesdna/intern/dna_defaults.c
M	source/blender/makesrna/RNA_access.h
M	source/blender/makesrna/intern/rna_ID.c
M	source/blender/makesrna/intern/rna_asset.c
M	source/blender/makesrna/intern/rna_internal.h
M	source/blender/makesrna/intern/rna_main.c
M	source/blender/makesrna/intern/rna_main_api.c

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

diff --git a/source/blender/blenkernel/BKE_asset.h b/source/blender/blenkernel/BKE_asset.h
index ce17acd7006..4954a2d64d2 100644
--- a/source/blender/blenkernel/BKE_asset.h
+++ b/source/blender/blenkernel/BKE_asset.h
@@ -27,8 +27,8 @@
 extern "C" {
 #endif
 
-struct Asset;
-struct CustomTag;
+struct AssetData *BKE_asset_data_create(void);
+void BKE_asset_data_free(struct AssetData *asset_data);
 
 struct CustomTagEnsureResult {
   struct CustomTag *tag;
@@ -36,11 +36,9 @@ struct CustomTagEnsureResult {
   bool is_new;
 };
 
-struct CustomTagEnsureResult BKE_asset_tag_ensure(struct Asset *asset, const char *name);
-void BKE_asset_tag_remove(struct Asset *asset, struct CustomTag *tag);
-
-struct AssetData *BKE_asset_data_create(void);
-void BKE_asset_data_free(struct AssetData *asset_data);
+struct CustomTagEnsureResult BKE_assetdata_tag_ensure(struct AssetData *asset_data,
+                                                      const char *name);
+void BKE_assetdata_tag_remove(struct AssetData *asset_data, struct CustomTag *tag);
 
 #ifdef __cplusplus
 }
diff --git a/source/blender/blenkernel/BKE_icons.h b/source/blender/blenkernel/BKE_icons.h
index 56c50c22bf4..a7ba5465743 100644
--- a/source/blender/blenkernel/BKE_icons.h
+++ b/source/blender/blenkernel/BKE_icons.h
@@ -128,6 +128,7 @@ void BKE_previewimg_clear_single(struct PreviewImage *prv, enum eIconSizes size)
 
 /* get the preview from any pointer */
 struct PreviewImage **BKE_previewimg_id_get_p(const struct ID *id);
+struct PreviewImage *BKE_previewimg_id_get(const struct ID *id);
 
 /* free the preview image belonging to the id */
 void BKE_previewimg_id_free(struct ID *id);
diff --git a/source/blender/blenkernel/BKE_idtype.h b/source/blender/blenkernel/BKE_idtype.h
index 9b8df3435b8..38322427374 100644
--- a/source/blender/blenkernel/BKE_idtype.h
+++ b/source/blender/blenkernel/BKE_idtype.h
@@ -169,7 +169,6 @@ typedef struct IDTypeInfo {
 /* Those are defined in the respective BKE files. */
 extern IDTypeInfo IDType_ID_SCE;
 extern IDTypeInfo IDType_ID_LI;
-extern IDTypeInfo IDType_ID_AST;
 extern IDTypeInfo IDType_ID_OB;
 extern IDTypeInfo IDType_ID_ME;
 extern IDTypeInfo IDType_ID_CU;
diff --git a/source/blender/blenkernel/BKE_main.h b/source/blender/blenkernel/BKE_main.h
index 7f875ca4d74..b7c70168a49 100644
--- a/source/blender/blenkernel/BKE_main.h
+++ b/source/blender/blenkernel/BKE_main.h
@@ -116,7 +116,6 @@ typedef struct Main {
   struct Library *curlib;
   ListBase scenes;
   ListBase libraries;
-  ListBase assets;
   ListBase objects;
   ListBase meshes;
   ListBase curves;
@@ -229,7 +228,7 @@ const char *BKE_main_blendfile_path_from_global(void);
 
 struct ListBase *which_libbase(struct Main *mainlib, short type);
 
-#define MAX_LIBARRAY 42
+#define MAX_LIBARRAY 41
 int set_listbasepointers(struct Main *main, struct ListBase *lb[MAX_LIBARRAY]);
 
 #define MAIN_VERSION_ATLEAST(main, ver, subver) \
diff --git a/source/blender/blenkernel/intern/asset.c b/source/blender/blenkernel/intern/asset.c
index 4edf35a686c..8053c0cedb0 100644
--- a/source/blender/blenkernel/intern/asset.c
+++ b/source/blender/blenkernel/intern/asset.c
@@ -26,68 +26,35 @@
 
 #include "BKE_asset.h"
 #include "BKE_icons.h"
-#include "BKE_idtype.h"
-#include "BKE_lib_query.h"
 
-#include "BLT_translation.h"
-
-#include "DNA_ID.h"
 #include "DNA_asset_types.h"
 #include "DNA_defaults.h"
 
 #include "MEM_guardedalloc.h"
 
-static void asset_init_data(ID *id)
-{
-  Asset *asset = (Asset *)id;
-  BLI_assert(MEMCMP_STRUCT_AFTER_IS_ZERO(asset, id));
-
-  MEMCPY_STRUCT_AFTER(asset, DNA_struct_default_get(Asset), id);
-}
-
-static void asset_free_data(ID *id)
+AssetData *BKE_asset_data_create(void)
 {
-  Asset *asset = (Asset *)id;
-
-  BKE_icon_id_delete((ID *)asset);
-  BKE_previewimg_free(&asset->preview);
-
-  MEM_SAFE_FREE(asset->description);
-  BLI_freelistN(&asset->tags);
+  AssetData *asset_data = MEM_callocN(sizeof(AssetData), __func__);
+  memcpy(asset_data, DNA_struct_default_get(AssetData), sizeof(*asset_data));
+  return asset_data;
 }
 
-static void asset_foreach_id(ID *id, LibraryForeachIDData *data)
+void BKE_asset_data_free(AssetData *asset_data)
 {
-  Asset *asset = (Asset *)id;
+  MEM_SAFE_FREE(asset_data->description);
+  BLI_freelistN(&asset_data->tags);
 
-  BKE_LIB_FOREACHID_PROCESS_ID(data, asset->referenced_id, IDWALK_CB_USER);
+  MEM_SAFE_FREE(asset_data);
 }
 
-IDTypeInfo IDType_ID_AST = {
-    /* id_code */ ID_AST,
-    /* id_filter */ FILTER_ID_AST,
-    /* main_listbase_index */ INDEX_ID_AST,
-    /* struct_size */ sizeof(Asset),
-    /* name */ "Asset",
-    /* name_plural */ "assets",
-    /* translation_context */ BLT_I18NCONTEXT_ID_ASSET,
-    /* flags */ 0,
-
-    /* init_data */ asset_init_data,
-    /* copy_data */ NULL, /* TODO */
-    /* free_data */ asset_free_data,
-    /* make_local */ NULL,
-    /* foreach_id */ asset_foreach_id,
-};
-
-struct CustomTagEnsureResult BKE_asset_tag_ensure(Asset *asset, const char *name)
+struct CustomTagEnsureResult BKE_assetdata_tag_ensure(AssetData *asset_data, const char *name)
 {
   struct CustomTagEnsureResult result = {.tag = NULL};
   if (!name[0]) {
     return result;
   }
 
-  CustomTag *tag = BLI_findstring(&asset->tags, name, offsetof(CustomTag, name));
+  CustomTag *tag = BLI_findstring(&asset_data->tags, name, offsetof(CustomTag, name));
 
   if (tag) {
     result.tag = tag;
@@ -98,24 +65,14 @@ struct CustomTagEnsureResult BKE_asset_tag_ensure(Asset *asset, const char *name
   tag = MEM_mallocN(sizeof(*tag), __func__);
   BLI_strncpy(tag->name, name, sizeof(tag->name));
 
-  BLI_addtail(&asset->tags, tag);
+  BLI_addtail(&asset_data->tags, tag);
 
   result.tag = tag;
   result.is_new = true;
   return result;
 }
 
-void BKE_asset_tag_remove(Asset *asset, CustomTag *tag)
+void BKE_assetdata_tag_remove(AssetData *asset_data, CustomTag *tag)
 {
-  BLI_freelinkN(&asset->tags, tag);
-}
-
-AssetData *BKE_asset_data_create(void)
-{
-  return MEM_callocN(sizeof(AssetData), __func__);
-}
-
-void BKE_asset_data_free(AssetData *asset_data)
-{
-  MEM_SAFE_FREE(asset_data);
+  BLI_freelinkN(&asset_data->tags, tag);
 }
diff --git a/source/blender/blenkernel/intern/icons.c b/source/blender/blenkernel/intern/icons.c
index 2090a41453d..c844558e63a 100644
--- a/source/blender/blenkernel/intern/icons.c
+++ b/source/blender/blenkernel/intern/icons.c
@@ -29,7 +29,6 @@
 
 #include "MEM_guardedalloc.h"
 
-#include "DNA_asset_types.h"
 #include "DNA_brush_types.h"
 #include "DNA_collection_types.h"
 #include "DNA_gpencil_types.h"
@@ -340,8 +339,6 @@ PreviewImage **BKE_previewimg_id_get_p(const ID *id)
     ID_PRV_CASE(ID_GR, Collection);
     ID_PRV_CASE(ID_SCE, Scene);
     ID_PRV_CASE(ID_SCR, bScreen);
-    ID_PRV_CASE(ID_AST, Asset);
-
 #undef ID_PRV_CASE
     default:
       break;
@@ -350,6 +347,12 @@ PreviewImage **BKE_previewimg_id_get_p(const ID *id)
   return NULL;
 }
 
+PreviewImage *BKE_previewimg_id_get(const ID *id)
+{
+  PreviewImage **prv_p = BKE_previewimg_id_get_p(id);
+  return prv_p ? *prv_p : NULL;
+}
+
 void BKE_previewimg_id_free(ID *id)
 {
   PreviewImage **prv_p = BKE_previewimg_id_get_p(id);
diff --git a/source/blender/blenkernel/intern/idtype.c b/source/blender/blenkernel/intern/idtype.c
index 6d270699280..1166ad9ad2f 100644
--- a/source/blender/blenkernel/intern/idtype.c
+++ b/source/blender/blenkernel/intern/idtype.c
@@ -75,7 +75,6 @@ static void id_type_init(void)
 
   INIT_TYPE(ID_SCE);
   INIT_TYPE(ID_LI);
-  INIT_TYPE(ID_AST);
   INIT_TYPE(ID_OB);
   INIT_TYPE(ID_ME);
   INIT_TYPE(ID_CU);
@@ -246,10 +245,9 @@ uint64_t BKE_idtype_idcode_to_idfilter(const short idcode)
   case ID_##_id: \
     return FILTER_ID_##_id
 
-  switch ((ID_Type)idcode) {
+  switch (idcode) {
     CASE_IDFILTER(AC);
     CASE_IDFILTER(AR);
-    CASE_IDFILTER(AST);
     CASE_IDFILTER(BR);
     CASE_IDFILTER(CA);
     CASE_IDFILTER(CF);
@@ -302,7 +300,6 @@ short BKE_idtype_idcode_from_idfilter(const uint64_t idfilter)
   switch (idfilter) {
     CASE_IDFILTER(AC);
     CASE_IDFILTER(AR);
-    CASE_IDFILTER(AST);
     CASE_IDFILTER(BR);
     CASE_IDFILTER(CA);
     CASE_IDFILTER(CF);
@@ -354,7 +351,6 @@ int BKE_idtype_idcode_to_index(const short idcode)
   switch ((ID_Type)idcode) {
     CASE_IDINDEX(AC);
     CASE_IDINDEX(AR);
-    CASE_IDINDEX(AST);
     CASE_IDINDEX(BR);
     CASE_IDINDEX(CA);
     CASE_IDINDEX(CF);
@@ -417,7 +413,6 @@ short BKE_idtype_idcode_from_index(const int index)
   switch (index) {
     CASE_IDCODE(AC);
     CASE_IDCODE(AR);
-    CASE_IDCODE(AST);
     CASE_IDCODE(BR);
     CASE_IDCODE(CA);
     CASE_IDCODE(CF);
diff --git a/source/blender/blenkernel/intern/lib_query.c b/source/blender/blenkernel/intern/lib_query.c
index a2e290cf336..00a42b12e07 100644
--- a/source/blender/blenkernel/intern/lib_query.c
+++ b/source/blender/blenkernel/intern/lib_query.c
@@ -339,8 +339,6 @@ bool BKE_library_id_can_use_idtype(ID *id_owner, const short id_type_used)
   switch ((ID_Type)id_type_owner) {
     case ID_LI:
       return ELEM(id_type_used, ID_LI);
-    case ID_AST:
-      return true;
     case ID_SCE:
       return (ELEM(id_type_used,
                    ID_OB,
diff --git a/source/blender/blenkernel/intern/main.c b/source/blender/blenkernel/intern/main.c
index dad4ffd8e0c..4b577ccec2c 100644
--- a/source/blender/blenkernel/intern/main.c
+++ b/source/blender/blenkernel/intern/main.c
@@ -428,8 +428,6 @@ ListBase *which_libbase(Main *bmain, short type)
       return &(bmain->scenes);
     case ID_LI:
       return &(bmain->libraries);
-    case ID_AST:
-      return &(bmain->assets);
     case ID_OB:
       return &(bmain->objects);
     case ID_ME:
@@ -526,8 +524,6 @@ int set_listbasepointers(Main *bmain, ListBase **lb)
   /* Libraries may be accessed from pretty much any other ID. */
   lb[INDEX_ID_LI] = &(bmain->libraries);
 
-  lb[INDEX_ID_AST] = &(bmain->assets);
-
   lb[INDEX_ID_IP] = &(bmain->ipo);
 
   /* Moved here to avoid problems when freeing with animato (aligorith). */
diff --git a/source/blender/blenloader/intern/readblenentry.c b/source/blender/blenloader/intern/readblenentry.c
index b2e765f3674..cb2094d050f 100644
--- a/source/blender/blenloader/intern/readblenentry.c
+++ b/source/blender/blenloader/intern/readblen

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list