Commit: a443287908248d0b83f490f0993d857fb1d73fec Author: Jacques Lucke Date: Fri Aug 28 13:05:48 2020 +0200 Branches: master https://developer.blender.org/rBa443287908248d0b83f490f0993d857fb1d73fec
IDTypeInfo: add .blend file io callbacks This is part of T76372. It adds the `blend_write`, `blend_read_data`, `blend_read_lib` and `blend_read_expand` which correspond to the various steps when reading and writing .blend files. Having these callbacks allows us to decentralize the blenloader code a lot more. This has the affect that code related to any specific ID type is less scattered. Reviewers: mont29 Differential Revision: https://developer.blender.org/D8670 =================================================================== M source/blender/blenkernel/BKE_idtype.h M source/blender/blenkernel/intern/action.c M source/blender/blenkernel/intern/armature.c M source/blender/blenkernel/intern/brush.c M source/blender/blenkernel/intern/cachefile.c M source/blender/blenkernel/intern/camera.c M source/blender/blenkernel/intern/collection.c M source/blender/blenkernel/intern/curve.c M source/blender/blenkernel/intern/font.c M source/blender/blenkernel/intern/gpencil.c M source/blender/blenkernel/intern/hair.c M source/blender/blenkernel/intern/image.c M source/blender/blenkernel/intern/ipo.c M source/blender/blenkernel/intern/key.c M source/blender/blenkernel/intern/lattice.c M source/blender/blenkernel/intern/library.c M source/blender/blenkernel/intern/light.c M source/blender/blenkernel/intern/lightprobe.c M source/blender/blenkernel/intern/linestyle.c M source/blender/blenkernel/intern/mask.c M source/blender/blenkernel/intern/material.c M source/blender/blenkernel/intern/mball.c M source/blender/blenkernel/intern/mesh.c M source/blender/blenkernel/intern/movieclip.c M source/blender/blenkernel/intern/node.c M source/blender/blenkernel/intern/object.c M source/blender/blenkernel/intern/paint.c M source/blender/blenkernel/intern/particle.c M source/blender/blenkernel/intern/pointcloud.c M source/blender/blenkernel/intern/scene.c M source/blender/blenkernel/intern/screen.c M source/blender/blenkernel/intern/simulation.cc M source/blender/blenkernel/intern/sound.c M source/blender/blenkernel/intern/speaker.c M source/blender/blenkernel/intern/text.c M source/blender/blenkernel/intern/texture.c M source/blender/blenkernel/intern/volume.cc M source/blender/blenkernel/intern/workspace.c M source/blender/blenkernel/intern/world.c M source/blender/blenloader/intern/readfile.c M source/blender/blenloader/intern/writefile.c M source/blender/windowmanager/intern/wm.c =================================================================== diff --git a/source/blender/blenkernel/BKE_idtype.h b/source/blender/blenkernel/BKE_idtype.h index aefba9ef02a..57b005d1a1e 100644 --- a/source/blender/blenkernel/BKE_idtype.h +++ b/source/blender/blenkernel/BKE_idtype.h @@ -34,6 +34,10 @@ extern "C" { struct ID; struct LibraryForeachIDData; struct Main; +struct BlendWriter; +struct BlendDataReader; +struct BlendLibReader; +struct BlendExpander; /** IDTypeInfo.flags. */ enum { @@ -89,6 +93,13 @@ typedef void (*IDTypeForeachCacheFunction)(struct ID *id, IDTypeForeachCacheFunctionCallback function_callback, void *user_data); +typedef void (*IDTypeBlendWriteFunction)(struct BlendWriter *writer, + struct ID *id, + const void *id_address); +typedef void (*IDTypeBlendReadDataFunction)(struct BlendDataReader *reader, struct ID *id); +typedef void (*IDTypeBlendReadLibFunction)(struct BlendLibReader *reader, struct ID *id); +typedef void (*IDTypeBlendReadExpandFunction)(struct BlendExpander *expander, struct ID *id); + typedef struct IDTypeInfo { /* ********** General IDType data. ********** */ @@ -161,6 +172,26 @@ typedef struct IDTypeInfo { * Iterator over all cache pointers of given ID. */ IDTypeForeachCacheFunction foreach_cache; + + /** + * Write all structs that should be saved in a .blend file. + */ + IDTypeBlendWriteFunction blend_write; + + /** + * Update pointers for all structs directly owned by this data block. + */ + IDTypeBlendReadDataFunction blend_read_data; + + /** + * Update pointers to other id data blocks. + */ + IDTypeBlendReadLibFunction blend_read_lib; + + /** + * Specify which other id data blocks should be loaded when the current one is loaded. + */ + IDTypeBlendReadExpandFunction blend_read_expand; } IDTypeInfo; /* ********** Declaration of each IDTypeInfo. ********** */ diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c index 85ac2c693cb..089d8bef09e 100644 --- a/source/blender/blenkernel/intern/action.c +++ b/source/blender/blenkernel/intern/action.c @@ -184,6 +184,12 @@ IDTypeInfo IDType_ID_AC = { .free_data = action_free_data, .make_local = NULL, .foreach_id = action_foreach_id, + .foreach_cache = NULL, + + .blend_write = NULL, + .blend_read_data = NULL, + .blend_read_lib = NULL, + .blend_read_expand = NULL, }; /* ***************** Library data level operations on action ************** */ diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c index 631ce4edd20..3b73702cf0f 100644 --- a/source/blender/blenkernel/intern/armature.c +++ b/source/blender/blenkernel/intern/armature.c @@ -180,6 +180,12 @@ IDTypeInfo IDType_ID_AR = { .free_data = armature_free_data, .make_local = NULL, .foreach_id = armature_foreach_id, + .foreach_cache = NULL, + + .blend_write = NULL, + .blend_read_data = NULL, + .blend_read_lib = NULL, + .blend_read_expand = NULL, }; /** \} */ diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c index 3c83ee55213..0749f29879c 100644 --- a/source/blender/blenkernel/intern/brush.c +++ b/source/blender/blenkernel/intern/brush.c @@ -210,6 +210,12 @@ IDTypeInfo IDType_ID_BR = { .free_data = brush_free_data, .make_local = brush_make_local, .foreach_id = brush_foreach_id, + .foreach_cache = NULL, + + .blend_write = NULL, + .blend_read_data = NULL, + .blend_read_lib = NULL, + .blend_read_expand = NULL, }; static RNG *brush_rng; diff --git a/source/blender/blenkernel/intern/cachefile.c b/source/blender/blenkernel/intern/cachefile.c index 9ad6ae84c5c..f3386df03c8 100644 --- a/source/blender/blenkernel/intern/cachefile.c +++ b/source/blender/blenkernel/intern/cachefile.c @@ -100,6 +100,12 @@ IDTypeInfo IDType_ID_CF = { .free_data = cache_file_free_data, .make_local = NULL, .foreach_id = NULL, + .foreach_cache = NULL, + + .blend_write = NULL, + .blend_read_data = NULL, + .blend_read_lib = NULL, + .blend_read_expand = NULL, }; /* TODO: make this per cache file to avoid global locks. */ diff --git a/source/blender/blenkernel/intern/camera.c b/source/blender/blenkernel/intern/camera.c index d8b4150b2b1..0c0ad7a57ab 100644 --- a/source/blender/blenkernel/intern/camera.c +++ b/source/blender/blenkernel/intern/camera.c @@ -128,6 +128,12 @@ IDTypeInfo IDType_ID_CA = { .free_data = camera_free_data, .make_local = camera_make_local, .foreach_id = camera_foreach_id, + .foreach_cache = NULL, + + .blend_write = NULL, + .blend_read_data = NULL, + .blend_read_lib = NULL, + .blend_read_expand = NULL, }; /** \} */ diff --git a/source/blender/blenkernel/intern/collection.c b/source/blender/blenkernel/intern/collection.c index 88037a8dad0..8975be2b618 100644 --- a/source/blender/blenkernel/intern/collection.c +++ b/source/blender/blenkernel/intern/collection.c @@ -173,6 +173,12 @@ IDTypeInfo IDType_ID_GR = { .free_data = collection_free_data, .make_local = NULL, .foreach_id = collection_foreach_id, + .foreach_cache = NULL, + + .blend_write = NULL, + .blend_read_data = NULL, + .blend_read_lib = NULL, + .blend_read_expand = NULL, }; /** \} */ diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c index 45ca89ac47e..44d5bbfd710 100644 --- a/source/blender/blenkernel/intern/curve.c +++ b/source/blender/blenkernel/intern/curve.c @@ -146,6 +146,12 @@ IDTypeInfo IDType_ID_CU = { .free_data = curve_free_data, .make_local = NULL, .foreach_id = curve_foreach_id, + .foreach_cache = NULL, + + .blend_write = NULL, + .blend_read_data = NULL, + .blend_read_lib = NULL, + .blend_read_expand = NULL, }; static int cu_isectLL(const float v1[3], diff --git a/source/blender/blenkernel/intern/font.c b/source/blender/blenkernel/intern/font.c index 4bedba8f76b..dfbb8202093 100644 --- a/source/blender/blenkernel/intern/font.c +++ b/source/blender/blenkernel/intern/font.c @@ -135,6 +135,12 @@ IDTypeInfo IDType_ID_VF = { .free_data = vfont_free_data, .make_local = NULL, .foreach_id = NULL, + .foreach_cache = NULL, + + .blend_write = NULL, + .blend_read_data = NULL, + .blend_read_lib = NULL, + .blend_read_expand = NULL, }; /***************************** VFont *******************************/ diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c index 4f65f8a57ab..10b6328ead4 100644 --- a/source/blender/blenkernel/intern/gpencil.c +++ b/source/blender/blenkernel/intern/gpencil.c @@ -126,6 +126,12 @@ IDTypeInfo IDType_ID_GD = { .free_data = greasepencil_free_data, .make_local = NULL, .foreach_id = greasepencil_foreach_id, + .foreach_cache = NULL, + + .blend_write = NULL, + .blend_read_data = NULL, + .blend_read_lib = NULL, + .blend_read_expand = NULL, }; /* ************************************************** */ diff --git a/source/blender/blenkernel/intern/hair.c b/source/blender/blenkernel/intern/hair.c index 2905bfc978a..8831d09698b 100644 --- a/source/blender/blenkernel/intern/hair.c +++ b/source/blender/blenkernel/intern/hair.c @@ -119,6 +119,12 @@ IDTypeInfo IDType_ID_HA = { .free_data = hair_free_data, .make_local = NULL, .foreach_id = hair_foreach_id, + .foreach_cache = NULL, + + .blend_write = NULL, + .blend_read_data = NULL, + .blend_read_lib = NULL, + .blend_read_expand = NULL, }; static void hair_random(Hair *hair) diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c index 7ff34acca7a..0f694a26b45 100644 --- a/source/blender/blenkernel/intern/image.c +++ b/source/blender/blenkernel/intern/image.c @@ -232,6 +232,11 @@ IDTypeInfo IDType_ID_IM = { .make_local = NULL, .foreach_id = NULL, .foreach_cache = image_foreach_cache, + + .blend_write = NULL, + .blend_read_data = NULL, + .blend_read_lib = NULL, + .blend_read_expand = NULL, }; /* prototypes */ diff --git a/source/blender/blenkernel/intern/ipo.c b/source/blender/blenkernel/intern/ipo.c index 968ce1d4a1c..3e92fd13370 100644 --- a/source/blender/blenkernel/intern/ipo.c +++ b/source/blender/blenkernel/intern/ipo.c @@ -124,6 +124,12 @@ IDTypeInfo IDType_ID_IP = { .free_data = ipo_free_data, .make_local = NULL, .foreach_id = NULL, + .foreach_cache = NULL, + + .blend_write = NULL, + .blend_read_data = NULL, + .blend_read_lib = NULL, + .blend_read_expand = NULL, }; /* *************************************************** */ diff --git a/source/blender/blenkernel/intern/key.c b/source/blender/blenkernel/intern/key.c index 0108befa710..456325851a6 100644 --- a/source/blender/blenkernel/intern/key.c +++ b/source/blender/blenkernel/intern/key.c @@ -113,6 +113,12 @@ IDTypeInfo IDType_ID_KE = { .free_data = shapekey_free_data, .make_local = NULL, .foreach_id = shapekey_foreach_id, + .foreach_cache = NULL, + + .blend_write = NULL, + .blend_read_data = NULL, + .blend_read_lib = NULL, + .blend_read_expand = NULL, }; #define KEY_MODE_DUMMY 0 /* use where mode isn't checked for */ diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c index 4d073593da7..5782fab905f 100644 --- a/source/blender/blenkernel/intern/lattice.c +++ b/source/blender/blenkernel/intern/lattice.c @@ -139,6 +139,12 @@ IDTypeInfo IDType_ID_LT = { .free_data = lattice_free_data, .make_local = NULL, .foreach_id = lattice_foreach_id, + .foreach_cache = NULL, + + .blend_write = NULL, + .blend_read_data = NULL, + .blend_read_lib = NULL, + .blend_read_expand = NULL, }; int BKE_lattice_index_from_uvw(Lattice *lt, const int u, const int v, const int w) diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c index 48c98be626d..4bbe3a4a26b 100644 --- a/source/blender/blenkernel/inter @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list [email protected] https://lists.blender.org/mailman/listinfo/bf-blender-cvs
