[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