diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2016-09-30 11:11:29 +0300 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2016-09-30 11:14:12 +0300 |
commit | 85d543b4acb35750ea81e12cc7c1cc5db55ce361 (patch) | |
tree | 14f1ce8439c89450b320ff762d339f660bfa9df4 /source/blender/blenloader | |
parent | 396a6d8a86f265c5fbb437b498b708a2f687a6f2 (diff) |
Fix T49489: Pose marker in camera action + marker bound to camera -> crash.
'camera' Object pointer of TimeMarkers is a 'temp' hack since Durian project...
Would need to be either made definitive now, or removed/reworked/whatever.
But since we intend to use that object pointer for other needs, and current code
could lead to crashing .blend files, for now let's fix that mess (was missing
some bits in read code, and also totally ignored in libquery code).
Should be safe for 2.78a.
Diffstat (limited to 'source/blender/blenloader')
-rw-r--r-- | source/blender/blenloader/intern/readfile.c | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 60f276b1744..d86a89a0e48 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -2511,6 +2511,12 @@ static void lib_link_action(FileData *fd, Main *main) // >>> XXX deprecated - old animation system lib_link_fcurves(fd, &act->id, &act->curves); + + for (TimeMarker *marker = act->markers.first; marker; marker = marker->next) { + if (marker->camera) { + marker->camera = newlibadr(fd, act->id.lib, marker->camera); + } + } } } } @@ -5608,7 +5614,6 @@ static void lib_link_scene(FileData *fd, Main *main) Base *base, *next; Sequence *seq; SceneRenderLayer *srl; - TimeMarker *marker; FreestyleModuleConfig *fmc; FreestyleLineSet *fls; @@ -5709,15 +5714,11 @@ static void lib_link_scene(FileData *fd, Main *main) } SEQ_END -#ifdef DURIAN_CAMERA_SWITCH - for (marker = sce->markers.first; marker; marker = marker->next) { + for (TimeMarker *marker = sce->markers.first; marker; marker = marker->next) { if (marker->camera) { marker->camera = newlibadr(fd, sce->id.lib, marker->camera); } } -#else - (void)marker; -#endif BKE_sequencer_update_muting(sce->ed); BKE_sequencer_update_sound_bounds_all(sce); @@ -8860,6 +8861,12 @@ static void expand_action(FileData *fd, Main *mainvar, bAction *act) /* F-Curves in Action */ expand_fcurves(fd, mainvar, &act->curves); + + for (TimeMarker *marker = act->markers.first; marker; marker = marker->next) { + if (marker->camera) { + expand_doit(fd, mainvar, marker->camera); + } + } } static void expand_keyingsets(FileData *fd, Main *mainvar, ListBase *list) @@ -9490,17 +9497,11 @@ static void expand_scene(FileData *fd, Main *mainvar, Scene *sce) expand_doit(fd, mainvar, sce->rigidbody_world->constraints); } -#ifdef DURIAN_CAMERA_SWITCH - { - TimeMarker *marker; - - for (marker = sce->markers.first; marker; marker = marker->next) { - if (marker->camera) { - expand_doit(fd, mainvar, marker->camera); - } + for (TimeMarker *marker = sce->markers.first; marker; marker = marker->next) { + if (marker->camera) { + expand_doit(fd, mainvar, marker->camera); } } -#endif expand_doit(fd, mainvar, sce->clip); } |