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
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2012-10-18 19:00:32 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2012-10-18 19:00:32 +0400
commit497ea5f306a802a3f7aaddd1300d29613eba64af (patch)
treed42ccf4f8a2191d8b4af7d8407444c975cce930c /intern/cycles/blender/blender_object.cpp
parentc4b46f119c0cf85c25b825e9989dc0d4748cb64d (diff)
Fix #32912: cycles crash with dead particles, actual crash was caused by an
inconsistency in the particle system code, using <= and <. Also tightened up checks on cycles side to avoid other potential crashes.
Diffstat (limited to 'intern/cycles/blender/blender_object.cpp')
-rw-r--r--intern/cycles/blender/blender_object.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/intern/cycles/blender/blender_object.cpp b/intern/cycles/blender/blender_object.cpp
index 2c32c8ad83f..6de2b0f08fa 100644
--- a/intern/cycles/blender/blender_object.cpp
+++ b/intern/cycles/blender/blender_object.cpp
@@ -24,6 +24,7 @@
#include "object.h"
#include "scene.h"
#include "nodes.h"
+#include "particles.h"
#include "shader.h"
#include "blender_sync.h"
@@ -307,6 +308,7 @@ void BlenderSync::sync_objects(BL::SpaceView3D b_v3d, int motion)
mesh_map.pre_sync();
object_map.pre_sync();
mesh_synced.clear();
+ particle_system_map.pre_sync();
}
/* object loop */
@@ -362,11 +364,16 @@ void BlenderSync::sync_objects(BL::SpaceView3D b_v3d, int motion)
object_free_duplilist(*b_ob);
}
- /* check if we should render or hide particle emitter */
+
+ /* sync particles and check if we should render or hide particle emitter */
BL::Object::particle_systems_iterator b_psys;
- for(b_ob->particle_systems.begin(b_psys); b_psys != b_ob->particle_systems.end(); ++b_psys)
+ for(b_ob->particle_systems.begin(b_psys); b_psys != b_ob->particle_systems.end(); ++b_psys) {
+ if(!motion)
+ sync_particles(*b_ob, *b_psys);
+
if(b_psys->settings().use_render_emitter())
hide = false;
+ }
if(!hide) {
/* object itself */
@@ -393,6 +400,8 @@ void BlenderSync::sync_objects(BL::SpaceView3D b_v3d, int motion)
scene->mesh_manager->tag_update(scene);
if(object_map.post_sync())
scene->object_manager->tag_update(scene);
+ if(particle_system_map.post_sync())
+ scene->particle_system_manager->tag_update(scene);
mesh_synced.clear();
}
}