diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2016-01-16 14:44:55 +0300 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2016-01-16 14:47:14 +0300 |
commit | 2c5bc023c23c68c39b373b34363542a390e82cb9 (patch) | |
tree | 5d4e97a0eb1fc823cd1c104f5afdb679a5f9392f /source/blender/blenkernel/intern/scene.c | |
parent | 36aa7e659e02bf5434af77749f587380a76e7512 (diff) |
Fix T47188: Blender crashes when trying to undo adding new scene with "copy settings".
Our RenderSettings struct may have a bit too much levels, makes it hard to track
all 'pointer' data during copy...
Fixed several issues here, but not sure I found all existing ones. :/
Diffstat (limited to 'source/blender/blenkernel/intern/scene.c')
-rw-r--r-- | source/blender/blenkernel/intern/scene.c | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index dee6a9f8f6c..2d4029bb105 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -170,6 +170,7 @@ Scene *BKE_scene_copy(Scene *sce, int type) rl = scen->r.layers; rv = scen->r.views; + curvemapping_free_data(&scen->r.mblur_shutter_curve); scen->r = sce->r; scen->r.layers = rl; scen->r.actlay = 0; @@ -183,6 +184,7 @@ Scene *BKE_scene_copy(Scene *sce, int type) scen->id.properties = IDP_CopyProperty(sce->id.properties); MEM_freeN(scen->toolsettings); + BKE_sound_destroy_scene(scen); } else { scen = BKE_libblock_copy(&sce->id); @@ -192,7 +194,7 @@ Scene *BKE_scene_copy(Scene *sce, int type) id_us_plus((ID *)scen->world); id_us_plus((ID *)scen->set); - id_us_plus((ID *)scen->gm.dome.warptext); + /* id_us_plus((ID *)scen->gm.dome.warptext); */ /* XXX Not refcounted? see readfile.c */ scen->ed = NULL; scen->theDag = NULL; @@ -226,14 +228,6 @@ Scene *BKE_scene_copy(Scene *sce, int type) base = base->next; } - /* copy color management settings */ - BKE_color_managed_display_settings_copy(&scen->display_settings, &sce->display_settings); - BKE_color_managed_view_settings_copy(&scen->view_settings, &sce->view_settings); - BKE_color_managed_view_settings_copy(&scen->r.im_format.view_settings, &sce->r.im_format.view_settings); - - BLI_strncpy(scen->sequencer_colorspace_settings.name, sce->sequencer_colorspace_settings.name, - sizeof(scen->sequencer_colorspace_settings.name)); - /* copy action and remove animation used by sequencer */ BKE_animdata_copy_id_action(&scen->id); @@ -254,10 +248,21 @@ Scene *BKE_scene_copy(Scene *sce, int type) } new_srl = new_srl->next; } - - curvemapping_copy_data(&scen->r.mblur_shutter_curve, &sce->r.mblur_shutter_curve); } + /* copy color management settings */ + BKE_color_managed_display_settings_copy(&scen->display_settings, &sce->display_settings); + BKE_color_managed_view_settings_copy(&scen->view_settings, &sce->view_settings); + BKE_color_managed_colorspace_settings_copy(&scen->sequencer_colorspace_settings, &sce->sequencer_colorspace_settings); + + BKE_color_managed_display_settings_copy(&scen->r.im_format.display_settings, &sce->r.im_format.display_settings); + BKE_color_managed_view_settings_copy(&scen->r.im_format.view_settings, &sce->r.im_format.view_settings); + + BKE_color_managed_display_settings_copy(&scen->r.bake.im_format.display_settings, &sce->r.bake.im_format.display_settings); + BKE_color_managed_view_settings_copy(&scen->r.bake.im_format.view_settings, &sce->r.bake.im_format.view_settings); + + curvemapping_copy_data(&scen->r.mblur_shutter_curve, &sce->r.mblur_shutter_curve); + /* tool settings */ scen->toolsettings = MEM_dupallocN(sce->toolsettings); |