From 2e8ab664d552a3361f286005025e1f6f7df14a23 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 17 Oct 2013 16:05:57 +0000 Subject: Fix cycles mesh synchronization being too slow with vector blur and duplis. --- intern/cycles/blender/blender_mesh.cpp | 6 ++++++ intern/cycles/blender/blender_object.cpp | 6 ++++++ intern/cycles/blender/blender_sync.h | 1 + 3 files changed, 13 insertions(+) (limited to 'intern') diff --git a/intern/cycles/blender/blender_mesh.cpp b/intern/cycles/blender/blender_mesh.cpp index 940a923e5af..f6c7319e210 100644 --- a/intern/cycles/blender/blender_mesh.cpp +++ b/intern/cycles/blender/blender_mesh.cpp @@ -539,6 +539,12 @@ void BlenderSync::sync_mesh_motion(BL::Object b_ob, Mesh *mesh, int motion) if(!size || !ccl::BKE_object_is_deform_modified(b_ob, b_scene, preview)) return; + /* ensure we only sync instanced meshes once */ + if(mesh_motion_synced.find(mesh) != mesh_motion_synced.end()) + return; + + mesh_motion_synced.insert(mesh); + /* get derived mesh */ BL::Mesh b_mesh = object_to_mesh(b_data, b_ob, b_scene, true, !preview, false); diff --git a/intern/cycles/blender/blender_object.cpp b/intern/cycles/blender/blender_object.cpp index 461e897efe1..ba584e172dc 100644 --- a/intern/cycles/blender/blender_object.cpp +++ b/intern/cycles/blender/blender_object.cpp @@ -405,6 +405,9 @@ void BlenderSync::sync_objects(BL::SpaceView3D b_v3d, int motion) mesh_synced.clear(); particle_system_map.pre_sync(); } + else { + mesh_motion_synced.clear(); + } /* object loop */ BL::Scene::objects_iterator b_ob; @@ -492,6 +495,9 @@ void BlenderSync::sync_objects(BL::SpaceView3D b_v3d, int motion) scene->particle_system_manager->tag_update(scene); mesh_synced.clear(); } + + if(motion) + mesh_motion_synced.clear(); } void BlenderSync::sync_motion(BL::SpaceView3D b_v3d, BL::Object b_override) diff --git a/intern/cycles/blender/blender_sync.h b/intern/cycles/blender/blender_sync.h index f6e19229578..295b1fcee5c 100644 --- a/intern/cycles/blender/blender_sync.h +++ b/intern/cycles/blender/blender_sync.h @@ -108,6 +108,7 @@ private: id_map light_map; id_map particle_system_map; set mesh_synced; + set mesh_motion_synced; void *world_map; bool world_recalc; -- cgit v1.2.3