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
path: root/intern
diff options
context:
space:
mode:
authorDalai Felinto <dfelinto@gmail.com>2019-01-25 16:05:04 +0300
committerDalai Felinto <dfelinto@gmail.com>2019-01-25 21:04:26 +0300
commit699b49e8e9d3f2fde5283e7c604782f83fd0c910 (patch)
tree07b583b25cc2b8b180e920dbed2e23dbafc162f9 /intern
parentfa1d5586a1ad53cb6529d05d7dcbb7d5a22de780 (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')
-rw-r--r--intern/cycles/blender/blender_session.cpp13
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) {