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:
authorBastien Montagne <montagne29@wanadoo.fr>2016-01-16 14:44:55 +0300
committerBastien Montagne <montagne29@wanadoo.fr>2016-01-16 14:47:14 +0300
commit2c5bc023c23c68c39b373b34363542a390e82cb9 (patch)
tree5d4e97a0eb1fc823cd1c104f5afdb679a5f9392f /source/blender/blenkernel/intern/scene.c
parent36aa7e659e02bf5434af77749f587380a76e7512 (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.c27
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);