diff options
Diffstat (limited to 'source/blender/blenkernel/intern/speaker.c')
-rw-r--r-- | source/blender/blenkernel/intern/speaker.c | 49 |
1 files changed, 45 insertions, 4 deletions
diff --git a/source/blender/blenkernel/intern/speaker.c b/source/blender/blenkernel/intern/speaker.c index 8f403792c46..0a8b4baf826 100644 --- a/source/blender/blenkernel/intern/speaker.c +++ b/source/blender/blenkernel/intern/speaker.c @@ -28,12 +28,15 @@ #include "BLT_translation.h" +#include "BKE_anim_data.h" #include "BKE_idtype.h" #include "BKE_lib_id.h" #include "BKE_lib_query.h" #include "BKE_main.h" #include "BKE_speaker.h" +#include "BLO_read_write.h" + static void speaker_init_data(ID *id) { Speaker *speaker = (Speaker *)id; @@ -50,6 +53,44 @@ static void speaker_foreach_id(ID *id, LibraryForeachIDData *data) BKE_LIB_FOREACHID_PROCESS(data, speaker->sound, IDWALK_CB_USER); } +static void speaker_blend_write(BlendWriter *writer, ID *id, const void *id_address) +{ + Speaker *spk = (Speaker *)id; + if (spk->id.us > 0 || BLO_write_is_undo(writer)) { + /* write LibData */ + BLO_write_id_struct(writer, Speaker, id_address, &spk->id); + BKE_id_blend_write(writer, &spk->id); + + if (spk->adt) { + BKE_animdata_blend_write(writer, spk->adt); + } + } +} + +static void speaker_blend_read_data(BlendDataReader *reader, ID *id) +{ + Speaker *spk = (Speaker *)id; + BLO_read_data_address(reader, &spk->adt); + BKE_animdata_blend_read_data(reader, spk->adt); + +#if 0 + spk->sound = newdataadr(fd, spk->sound); + direct_link_sound(fd, spk->sound); +#endif +} + +static void speaker_blend_read_lib(BlendLibReader *reader, ID *id) +{ + Speaker *spk = (Speaker *)id; + BLO_read_id_address(reader, spk->id.lib, &spk->sound); +} + +static void speaker_blend_read_expand(BlendExpander *expander, ID *id) +{ + Speaker *spk = (Speaker *)id; + BLO_expand(expander, spk->sound); +} + IDTypeInfo IDType_ID_SPK = { .id_code = ID_SPK, .id_filter = FILTER_ID_SPK, @@ -67,10 +108,10 @@ IDTypeInfo IDType_ID_SPK = { .foreach_id = speaker_foreach_id, .foreach_cache = NULL, - .blend_write = NULL, - .blend_read_data = NULL, - .blend_read_lib = NULL, - .blend_read_expand = NULL, + .blend_write = speaker_blend_write, + .blend_read_data = speaker_blend_read_data, + .blend_read_lib = speaker_blend_read_lib, + .blend_read_expand = speaker_blend_read_expand, }; void *BKE_speaker_add(Main *bmain, const char *name) |