diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-02-19 17:29:58 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-02-19 17:40:04 +0300 |
commit | 38f0d5f75af7d2f30156f4008dc5bc8d8394fbf3 (patch) | |
tree | e4c46983e63fa98f75b61f9cc08e3c667586e24c /source/blender/editors/space_view3d | |
parent | 22eeae8104505b176cee5b9bba2071303b4465ea (diff) |
Fix T61714, T61712: crash reloading images after recent changes.
Now that we are looping over all image users that were previously ignored,
it shows some scene pointers are invalid. Always clear them on load, and
don't keep scene permanently in the image user except for the image editor.
Otherwise the pointer can go out of date.
Diffstat (limited to 'source/blender/editors/space_view3d')
-rw-r--r-- | source/blender/editors/space_view3d/view3d_draw_legacy.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/source/blender/editors/space_view3d/view3d_draw_legacy.c b/source/blender/editors/space_view3d/view3d_draw_legacy.c index 560b7330603..8db93ae3bba 100644 --- a/source/blender/editors/space_view3d/view3d_draw_legacy.c +++ b/source/blender/editors/space_view3d/view3d_draw_legacy.c @@ -480,8 +480,6 @@ static void view3d_draw_bgpic(Scene *scene, Depsgraph *depsgraph, Camera *cam = v3d->camera->data; for (CameraBGImage *bgpic = cam->bg_images.first; bgpic; bgpic = bgpic->next) { - bgpic->iuser.scene = scene; /* Needed for render results. */ - if ((bgpic->flag & CAM_BGIMG_FLAG_FOREGROUND) != fg_flag) continue; @@ -504,13 +502,16 @@ static void view3d_draw_bgpic(Scene *scene, Depsgraph *depsgraph, ima = bgpic->ima; if (ima == NULL) continue; - BKE_image_user_frame_calc(&bgpic->iuser, (int)DEG_get_ctime(depsgraph)); - if (ima->source == IMA_SRC_SEQUENCE && !(bgpic->iuser.flag & IMA_USER_FRAME_IN_RANGE)) { + + ImageUser iuser = bgpic->iuser; + iuser.scene = scene; /* Needed for render results. */ + BKE_image_user_frame_calc(&iuser, (int)DEG_get_ctime(depsgraph)); + if (ima->source == IMA_SRC_SEQUENCE && !(iuser.flag & IMA_USER_FRAME_IN_RANGE)) { ibuf = NULL; /* frame is out of range, dont show */ } else { - view3d_stereo_bgpic_setup(scene, v3d, ima, &bgpic->iuser); - ibuf = BKE_image_acquire_ibuf(ima, &bgpic->iuser, &lock); + view3d_stereo_bgpic_setup(scene, v3d, ima, &iuser); + ibuf = BKE_image_acquire_ibuf(ima, &iuser, &lock); releaseibuf = ibuf; } |