From 699b49e8e9d3f2fde5283e7c604782f83fd0c910 Mon Sep 17 00:00:00 2001 From: Dalai Felinto Date: Fri, 25 Jan 2019 11:05:04 -0200 Subject: 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 --- intern/cycles/blender/blender_session.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'intern/cycles/blender/blender_session.cpp') 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) { -- cgit v1.2.3