From 140d6cc4a2a13134b607cabed76ac7d195bf3e41 Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Fri, 6 Nov 2020 14:49:15 +0100 Subject: Refactor: move Scene .blend writing to IDTypeInfo callback --- source/blender/blenloader/intern/writefile.c | 239 +-------------------------- 1 file changed, 1 insertion(+), 238 deletions(-) (limited to 'source/blender/blenloader/intern/writefile.c') 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: -- cgit v1.2.3