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:
authorCampbell Barton <ideasman42@gmail.com>2018-05-23 13:19:56 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-05-23 13:51:48 +0300
commitd59b74adb38f3ac6b85107aa506e471efbd2a20c (patch)
tree28e68e70c08a204232cf3b04637e96c6e4a00594 /source/blender/blenloader/intern/readfile.c
parent858e8f453d48fe8f2285ef2dd1d11cdc099de6d4 (diff)
Fix T53481: Linked scene crashes on load
Diffstat (limited to 'source/blender/blenloader/intern/readfile.c')
-rw-r--r--source/blender/blenloader/intern/readfile.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 867eb1d749a..6695b6ced37 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -2882,7 +2882,15 @@ static void lib_link_workspaces(FileData *fd, Main *bmain)
relation = relation->next)
{
relation->parent = newlibadr(fd, id->lib, relation->parent);
- /* relation->value is set in direct_link_workspace_link_scene_data */
+ /* relation->value is set in direct_link_workspace_link_scene_data,
+ * except when loading linked data. */
+ Scene *scene = relation->parent;
+ if (scene->id.lib != NULL) {
+ relation->value = BLI_findstring(&scene->view_layers, relation->value_idname, offsetof(ViewLayer, name));
+ }
+ if (relation->value == NULL) {
+ relation->value = scene->view_layers.first;
+ }
}
for (WorkSpaceLayout *layout = layouts->first, *layout_next; layout; layout = layout_next) {
@@ -6066,12 +6074,15 @@ static void direct_link_workspace_link_scene_data(
relation != NULL;
relation = relation->next)
{
- ViewLayer *layer = newdataadr(fd, relation->value);
- if (layer) {
- BLI_assert(BLI_findindex(&scene->view_layers, layer) != -1);
+ ViewLayer *view_layer = newdataadr(fd, relation->value);
+ if (view_layer != NULL) {
+ BLI_assert(BLI_findindex(&scene->view_layers, view_layer) != -1);
/* relation->parent is set in lib_link_workspaces */
- relation->value = layer;
}
+ if (UNLIKELY(view_layer == NULL)) {
+ view_layer = scene->view_layers.first;
+ }
+ relation->value = view_layer;
}
}
}