diff options
author | Dalai Felinto <dfelinto@gmail.com> | 2019-01-25 16:05:04 +0300 |
---|---|---|
committer | Dalai Felinto <dfelinto@gmail.com> | 2019-01-25 21:04:26 +0300 |
commit | 699b49e8e9d3f2fde5283e7c604782f83fd0c910 (patch) | |
tree | 07b583b25cc2b8b180e920dbed2e23dbafc162f9 /intern/cycles | |
parent | fa1d5586a1ad53cb6529d05d7dcbb7d5a22de780 (diff) |
Fix T58142: Crash when use Cycles to render stereoscopy
This is a quick workaround to prevent the crashes with multi-view.
The ultimate solution can be plenty, and would turn around refactoring
Cycles to handle multi-view internally, so that depsgraph could be freed
before render with no problems.
Reviewers: brecht, sergey
For the complete discussion check: https://developer.blender.org/D4239
Diffstat (limited to 'intern/cycles')
-rw-r--r-- | intern/cycles/blender/blender_session.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp index c634926ea9f..9949660169f 100644 --- a/intern/cycles/blender/blender_session.cpp +++ b/intern/cycles/blender/blender_session.cpp @@ -449,6 +449,12 @@ void BlenderSession::render(BL::Depsgraph& b_depsgraph_) scene->integrator->tag_update(scene); BL::RenderResult::views_iterator b_view_iter; + + int num_views = 0; + for(b_rr.views.begin(b_view_iter); b_view_iter != b_rr.views.end(); ++b_view_iter) { + num_views++; + } + int view_index = 0; for(b_rr.views.begin(b_view_iter); b_view_iter != b_rr.views.end(); ++b_view_iter, ++view_index) { b_rview_name = b_view_iter->name(); @@ -470,7 +476,12 @@ void BlenderSession::render(BL::Depsgraph& b_depsgraph_) /* Attempt to free all data which is held by Blender side, since at this * point we knwo that we've got everything to render current view layer. */ - free_blender_memory_if_possible(); + /* At the moment we only free if we are not doing multi-view (or if we are rendering the last view). + * See T58142/D4239 for discussion. + */ + if(view_index == num_views - 1) { + free_blender_memory_if_possible(); + } /* Make sure all views have different noise patterns. - hardcoded value just to make it random */ if(view_index != 0) { |