diff options
author | Jacques Lucke <jacques@blender.org> | 2020-11-06 17:37:56 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2020-11-06 17:37:56 +0300 |
commit | 958ceaf5bff22ca21b7b0aa7abbe10edfac991d0 (patch) | |
tree | 69b85a0b58933e993e9893418f48b81eb3b5dbd1 /source/blender/blenkernel/intern/scene.c | |
parent | 2f3181d0f2b426652738442ca59a6b61880e52d0 (diff) |
Refactor: move Scene .blend expand to IDTypeInfo callback
Diffstat (limited to 'source/blender/blenkernel/intern/scene.c')
-rw-r--r-- | source/blender/blenkernel/intern/scene.c | 110 |
1 files changed, 109 insertions, 1 deletions
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index 36bfec8f9ec..bed10df5ace 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -1549,6 +1549,114 @@ static void scene_blend_read_lib(BlendLibReader *reader, ID *id) #endif } +static void scene_blend_read_expand(BlendExpander *expander, ID *id) +{ + Scene *sce = (Scene *)id; + + LISTBASE_FOREACH (Base *, base_legacy, &sce->base) { + BLO_expand(expander, base_legacy->object); + } + BLO_expand(expander, sce->camera); + BLO_expand(expander, sce->world); + + BKE_keyingsets_blend_read_expand(expander, &sce->keyingsets); + + if (sce->set) { + BLO_expand(expander, sce->set); + } + + LISTBASE_FOREACH (SceneRenderLayer *, srl, &sce->r.layers) { + BLO_expand(expander, srl->mat_override); + LISTBASE_FOREACH (FreestyleModuleConfig *, module, &srl->freestyleConfig.modules) { + if (module->script) { + BLO_expand(expander, module->script); + } + } + LISTBASE_FOREACH (FreestyleLineSet *, lineset, &srl->freestyleConfig.linesets) { + if (lineset->group) { + BLO_expand(expander, lineset->group); + } + BLO_expand(expander, lineset->linestyle); + } + } + + LISTBASE_FOREACH (ViewLayer *, view_layer, &sce->view_layers) { + IDP_BlendReadExpand(expander, view_layer->id_properties); + + LISTBASE_FOREACH (FreestyleModuleConfig *, module, &view_layer->freestyle_config.modules) { + if (module->script) { + BLO_expand(expander, module->script); + } + } + + LISTBASE_FOREACH (FreestyleLineSet *, lineset, &view_layer->freestyle_config.linesets) { + if (lineset->group) { + BLO_expand(expander, lineset->group); + } + BLO_expand(expander, lineset->linestyle); + } + } + + if (sce->gpd) { + BLO_expand(expander, sce->gpd); + } + + if (sce->ed) { + Sequence *seq; + + SEQ_ALL_BEGIN (sce->ed, seq) { + IDP_BlendReadExpand(expander, seq->prop); + + if (seq->scene) { + BLO_expand(expander, seq->scene); + } + if (seq->scene_camera) { + BLO_expand(expander, seq->scene_camera); + } + if (seq->clip) { + BLO_expand(expander, seq->clip); + } + if (seq->mask) { + BLO_expand(expander, seq->mask); + } + if (seq->sound) { + BLO_expand(expander, seq->sound); + } + + if (seq->type == SEQ_TYPE_TEXT && seq->effectdata) { + TextVars *data = seq->effectdata; + BLO_expand(expander, data->text_font); + } + } + SEQ_ALL_END; + } + + if (sce->rigidbody_world) { + BLO_expand(expander, sce->rigidbody_world->group); + BLO_expand(expander, sce->rigidbody_world->constraints); + } + + LISTBASE_FOREACH (TimeMarker *, marker, &sce->markers) { + IDP_BlendReadExpand(expander, marker->prop); + + if (marker->camera) { + BLO_expand(expander, marker->camera); + } + } + + BLO_expand(expander, sce->clip); + +#ifdef USE_COLLECTION_COMPAT_28 + if (sce->collection) { + BKE_collection_compat_blend_read_expand(expander, sce->collection); + } +#endif + + if (sce->r.bake.cage_object) { + BLO_expand(expander, sce->r.bake.cage_object); + } +} + static void scene_undo_preserve(BlendLibReader *reader, ID *id_new, ID *id_old) { Scene *scene_new = (Scene *)id_new; @@ -1587,7 +1695,7 @@ IDTypeInfo IDType_ID_SCE = { .blend_write = scene_blend_write, .blend_read_data = scene_blend_read_data, .blend_read_lib = scene_blend_read_lib, - .blend_read_expand = NULL, + .blend_read_expand = scene_blend_read_expand, .blend_read_undo_preserve = scene_undo_preserve, }; |