Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacques Lucke <jacques@blender.org>2020-11-06 16:49:15 +0300
committerJacques Lucke <jacques@blender.org>2020-11-06 16:49:30 +0300
commit140d6cc4a2a13134b607cabed76ac7d195bf3e41 (patch)
tree8fce8b975346e9a810718c9b5c0a523eea8243b3 /source/blender/blenloader/intern/writefile.c
parenta83fcf2b35fa66686c722c8f70664eb1ded36829 (diff)
Refactor: move Scene .blend writing to IDTypeInfo callback
Diffstat (limited to 'source/blender/blenloader/intern/writefile.c')
-rw-r--r--source/blender/blenloader/intern/writefile.c239
1 files changed, 1 insertions, 238 deletions
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 024254f8d0e..7cce2950a0f 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -1242,241 +1242,6 @@ static void write_object(BlendWriter *writer, Object *ob, const void *id_address
}
}
-static void write_scene(BlendWriter *writer, Scene *sce, const void *id_address)
-{
- if (BLO_write_is_undo(writer)) {
- /* Clean up, important in undo case to reduce false detection of changed data-blocks. */
- /* XXX This UI data should not be stored in Scene at all... */
- memset(&sce->cursor, 0, sizeof(sce->cursor));
- }
-
- /* write LibData */
- BLO_write_id_struct(writer, Scene, id_address, &sce->id);
- BKE_id_blend_write(writer, &sce->id);
-
- if (sce->adt) {
- BKE_animdata_blend_write(writer, sce->adt);
- }
- BKE_keyingsets_blend_write(writer, &sce->keyingsets);
-
- /* direct data */
- ToolSettings *tos = sce->toolsettings;
- BLO_write_struct(writer, ToolSettings, tos);
- if (tos->vpaint) {
- BLO_write_struct(writer, VPaint, tos->vpaint);
- BKE_paint_blend_write(writer, &tos->vpaint->paint);
- }
- if (tos->wpaint) {
- BLO_write_struct(writer, VPaint, tos->wpaint);
- BKE_paint_blend_write(writer, &tos->wpaint->paint);
- }
- if (tos->sculpt) {
- BLO_write_struct(writer, Sculpt, tos->sculpt);
- BKE_paint_blend_write(writer, &tos->sculpt->paint);
- }
- if (tos->uvsculpt) {
- BLO_write_struct(writer, UvSculpt, tos->uvsculpt);
- BKE_paint_blend_write(writer, &tos->uvsculpt->paint);
- }
- if (tos->gp_paint) {
- BLO_write_struct(writer, GpPaint, tos->gp_paint);
- BKE_paint_blend_write(writer, &tos->gp_paint->paint);
- }
- if (tos->gp_vertexpaint) {
- BLO_write_struct(writer, GpVertexPaint, tos->gp_vertexpaint);
- BKE_paint_blend_write(writer, &tos->gp_vertexpaint->paint);
- }
- if (tos->gp_sculptpaint) {
- BLO_write_struct(writer, GpSculptPaint, tos->gp_sculptpaint);
- BKE_paint_blend_write(writer, &tos->gp_sculptpaint->paint);
- }
- if (tos->gp_weightpaint) {
- BLO_write_struct(writer, GpWeightPaint, tos->gp_weightpaint);
- BKE_paint_blend_write(writer, &tos->gp_weightpaint->paint);
- }
- /* write grease-pencil custom ipo curve to file */
- if (tos->gp_interpolate.custom_ipo) {
- BKE_curvemapping_blend_write(writer, tos->gp_interpolate.custom_ipo);
- }
- /* write grease-pencil multiframe falloff curve to file */
- if (tos->gp_sculpt.cur_falloff) {
- BKE_curvemapping_blend_write(writer, tos->gp_sculpt.cur_falloff);
- }
- /* write grease-pencil primitive curve to file */
- if (tos->gp_sculpt.cur_primitive) {
- BKE_curvemapping_blend_write(writer, tos->gp_sculpt.cur_primitive);
- }
- /* Write the curve profile to the file. */
- if (tos->custom_bevel_profile_preset) {
- BKE_curveprofile_blend_write(writer, tos->custom_bevel_profile_preset);
- }
-
- BKE_paint_blend_write(writer, &tos->imapaint.paint);
-
- Editing *ed = sce->ed;
- if (ed) {
- Sequence *seq;
-
- BLO_write_struct(writer, Editing, ed);
-
- /* reset write flags too */
-
- SEQ_ALL_BEGIN (ed, seq) {
- if (seq->strip) {
- seq->strip->done = false;
- }
- BLO_write_struct(writer, Sequence, seq);
- }
- SEQ_ALL_END;
-
- SEQ_ALL_BEGIN (ed, seq) {
- if (seq->strip && seq->strip->done == 0) {
- /* write strip with 'done' at 0 because readfile */
-
- if (seq->effectdata) {
- switch (seq->type) {
- case SEQ_TYPE_COLOR:
- BLO_write_struct(writer, SolidColorVars, seq->effectdata);
- break;
- case SEQ_TYPE_SPEED:
- BLO_write_struct(writer, SpeedControlVars, seq->effectdata);
- break;
- case SEQ_TYPE_WIPE:
- BLO_write_struct(writer, WipeVars, seq->effectdata);
- break;
- case SEQ_TYPE_GLOW:
- BLO_write_struct(writer, GlowVars, seq->effectdata);
- break;
- case SEQ_TYPE_TRANSFORM:
- BLO_write_struct(writer, TransformVars, seq->effectdata);
- break;
- case SEQ_TYPE_GAUSSIAN_BLUR:
- BLO_write_struct(writer, GaussianBlurVars, seq->effectdata);
- break;
- case SEQ_TYPE_TEXT:
- BLO_write_struct(writer, TextVars, seq->effectdata);
- break;
- case SEQ_TYPE_COLORMIX:
- BLO_write_struct(writer, ColorMixVars, seq->effectdata);
- break;
- }
- }
-
- BLO_write_struct(writer, Stereo3dFormat, seq->stereo3d_format);
-
- Strip *strip = seq->strip;
- BLO_write_struct(writer, Strip, strip);
- if (strip->crop) {
- BLO_write_struct(writer, StripCrop, strip->crop);
- }
- if (strip->transform) {
- BLO_write_struct(writer, StripTransform, strip->transform);
- }
- if (strip->proxy) {
- BLO_write_struct(writer, StripProxy, strip->proxy);
- }
- if (seq->type == SEQ_TYPE_IMAGE) {
- BLO_write_struct_array(writer,
- StripElem,
- MEM_allocN_len(strip->stripdata) / sizeof(struct StripElem),
- strip->stripdata);
- }
- else if (ELEM(seq->type, SEQ_TYPE_MOVIE, SEQ_TYPE_SOUND_RAM, SEQ_TYPE_SOUND_HD)) {
- BLO_write_struct(writer, StripElem, strip->stripdata);
- }
-
- strip->done = true;
- }
-
- if (seq->prop) {
- IDP_BlendWrite(writer, seq->prop);
- }
-
- BKE_sequence_modifier_blend_write(writer, &seq->modifiers);
- }
- SEQ_ALL_END;
-
- /* new; meta stack too, even when its nasty restore code */
- LISTBASE_FOREACH (MetaStack *, ms, &ed->metastack) {
- BLO_write_struct(writer, MetaStack, ms);
- }
- }
-
- if (sce->r.avicodecdata) {
- BLO_write_struct(writer, AviCodecData, sce->r.avicodecdata);
- if (sce->r.avicodecdata->lpFormat) {
- BLO_write_raw(writer, (size_t)sce->r.avicodecdata->cbFormat, sce->r.avicodecdata->lpFormat);
- }
- if (sce->r.avicodecdata->lpParms) {
- BLO_write_raw(writer, (size_t)sce->r.avicodecdata->cbParms, sce->r.avicodecdata->lpParms);
- }
- }
- if (sce->r.ffcodecdata.properties) {
- IDP_BlendWrite(writer, sce->r.ffcodecdata.properties);
- }
-
- /* writing dynamic list of TimeMarkers to the blend file */
- LISTBASE_FOREACH (TimeMarker *, marker, &sce->markers) {
- BLO_write_struct(writer, TimeMarker, marker);
-
- if (marker->prop != NULL) {
- IDP_BlendWrite(writer, marker->prop);
- }
- }
-
- /* writing dynamic list of TransformOrientations to the blend file */
- LISTBASE_FOREACH (TransformOrientation *, ts, &sce->transform_spaces) {
- BLO_write_struct(writer, TransformOrientation, ts);
- }
-
- /* writing MultiView to the blend file */
- LISTBASE_FOREACH (SceneRenderView *, srv, &sce->r.views) {
- BLO_write_struct(writer, SceneRenderView, srv);
- }
-
- if (sce->nodetree) {
- BLO_write_struct(writer, bNodeTree, sce->nodetree);
- ntreeBlendWrite(writer, sce->nodetree);
- }
-
- BKE_color_managed_view_settings_blend_write(writer, &sce->view_settings);
-
- /* writing RigidBodyWorld data to the blend file */
- if (sce->rigidbody_world) {
- /* Set deprecated pointers to prevent crashes of older Blenders */
- sce->rigidbody_world->pointcache = sce->rigidbody_world->shared->pointcache;
- sce->rigidbody_world->ptcaches = sce->rigidbody_world->shared->ptcaches;
- BLO_write_struct(writer, RigidBodyWorld, sce->rigidbody_world);
-
- BLO_write_struct(writer, RigidBodyWorld_Shared, sce->rigidbody_world->shared);
- BLO_write_struct(writer, EffectorWeights, sce->rigidbody_world->effector_weights);
- BKE_ptcache_blend_write(writer, &(sce->rigidbody_world->shared->ptcaches));
- }
-
- BKE_previewimg_blend_write(writer, sce->preview);
- BKE_curvemapping_curves_blend_write(writer, &sce->r.mblur_shutter_curve);
-
- LISTBASE_FOREACH (ViewLayer *, view_layer, &sce->view_layers) {
- BKE_view_layer_blend_write(writer, view_layer);
- }
-
- if (sce->master_collection) {
- BLO_write_struct(writer, Collection, sce->master_collection);
- BKE_collection_blend_write_nolib(writer, sce->master_collection);
- }
-
- /* Eevee Lightcache */
- if (sce->eevee.light_cache_data && !BLO_write_is_undo(writer)) {
- BLO_write_struct(writer, LightCache, sce->eevee.light_cache_data);
- EEVEE_lightcache_blend_write(writer, sce->eevee.light_cache_data);
- }
-
- BKE_screen_view3d_shading_blend_write(writer, &sce->display.shading);
-
- /* Freed on doversion. */
- BLI_assert(sce->layer_properties == NULL);
-}
-
/* Keep it last of write_foodata functions. */
static void write_libraries(WriteData *wd, Main *main)
{
@@ -1735,12 +1500,10 @@ static bool write_file_handle(Main *mainvar,
}
switch ((ID_Type)GS(id->name)) {
- case ID_SCE:
- write_scene(&writer, (Scene *)id_buffer, id);
- break;
case ID_OB:
write_object(&writer, (Object *)id_buffer, id);
break;
+ case ID_SCE:
case ID_WM:
case ID_WS:
case ID_SCR: