From e3e75b393600954796127f229d3b3c35dddc9d7c Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Wed, 20 Jun 2012 14:24:52 +0000 Subject: [PATCH] Fix #31883: cycles vectors pass rendering crash with some render layers using it and others not. --- intern/cycles/blender/blender_session.cpp | 2 +- intern/cycles/render/film.cpp | 11 +++++++++++ intern/cycles/render/film.h | 1 + 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp index 12d7d00fb61..d09e43bd76d 100644 --- a/intern/cycles/blender/blender_session.cpp +++ b/intern/cycles/blender/blender_session.cpp @@ -218,7 +218,7 @@ void BlenderSession::render() } buffer_params.passes = passes; - scene->film->passes = passes; + scene->film->tag_passes_update(scene, passes); scene->film->tag_update(scene); scene->integrator->tag_update(scene); diff --git a/intern/cycles/render/film.cpp b/intern/cycles/render/film.cpp index 035821fadde..fdf25ca7908 100644 --- a/intern/cycles/render/film.cpp +++ b/intern/cycles/render/film.cpp @@ -20,6 +20,7 @@ #include "device.h" #include "film.h" #include "integrator.h" +#include "mesh.h" #include "scene.h" #include "util_algorithm.h" @@ -296,6 +297,16 @@ bool Film::modified(const Film& film) && Pass::equals(passes, film.passes)); } +void Film::tag_passes_update(Scene *scene, const vector& passes_) +{ + if(Pass::contains(passes, PASS_UV) != Pass::contains(passes_, PASS_UV)) + scene->mesh_manager->tag_update(scene); + else if(Pass::contains(passes, PASS_MOTION) != Pass::contains(passes_, PASS_MOTION)) + scene->mesh_manager->tag_update(scene); + + passes = passes_; +} + void Film::tag_update(Scene *scene) { need_update = true; diff --git a/intern/cycles/render/film.h b/intern/cycles/render/film.h index c7d2ee24388..52d1a8428f8 100644 --- a/intern/cycles/render/film.h +++ b/intern/cycles/render/film.h @@ -56,6 +56,7 @@ public: void device_free(Device *device, DeviceScene *dscene); bool modified(const Film& film); + void tag_passes_update(Scene *scene, const vector& passes_); void tag_update(Scene *scene); };