From 20746f6bb05dbcfbc3d425cbf3cd6bf163dbc76e Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 31 May 2011 10:57:43 +0000 Subject: [PATCH] Cycles: fix instanced mesh sync being a bit too slow. --- intern/cycles/blender/blender_mesh.cpp | 6 ++++++ intern/cycles/blender/blender_object.cpp | 2 ++ intern/cycles/blender/blender_sync.h | 1 + 3 files changed, 9 insertions(+) diff --git a/intern/cycles/blender/blender_mesh.cpp b/intern/cycles/blender/blender_mesh.cpp index e18a67bed8f..36f87a6100a 100644 --- a/intern/cycles/blender/blender_mesh.cpp +++ b/intern/cycles/blender/blender_mesh.cpp @@ -252,6 +252,12 @@ Mesh *BlenderSync::sync_mesh(BL::Object b_ob, bool object_updated) } } + /* ensure we only sync instanced meshes once */ + if(mesh_synced.find(mesh) != mesh_synced.end()) + return mesh; + + mesh_synced.insert(mesh); + /* create derived mesh */ BL::Mesh b_mesh = object_to_mesh(b_ob, b_scene, true, !preview); /* todo: this will crash on non-mesh types! */ diff --git a/intern/cycles/blender/blender_object.cpp b/intern/cycles/blender/blender_object.cpp index 932cb2bad41..241cbf07357 100644 --- a/intern/cycles/blender/blender_object.cpp +++ b/intern/cycles/blender/blender_object.cpp @@ -139,6 +139,7 @@ void BlenderSync::sync_objects(BL::SpaceView3D b_v3d) light_map.pre_sync(); mesh_map.pre_sync(); object_map.pre_sync(); + mesh_synced.clear(); /* object loop */ BL::Scene::objects_iterator b_ob; @@ -177,6 +178,7 @@ void BlenderSync::sync_objects(BL::SpaceView3D b_v3d) scene->mesh_manager->tag_update(scene); if(object_map.post_sync()) scene->object_manager->tag_update(scene); + mesh_synced.clear(); } CCL_NAMESPACE_END diff --git a/intern/cycles/blender/blender_sync.h b/intern/cycles/blender/blender_sync.h index 732a1b30260..16ce1998a24 100644 --- a/intern/cycles/blender/blender_sync.h +++ b/intern/cycles/blender/blender_sync.h @@ -92,6 +92,7 @@ private: id_map object_map; id_map mesh_map; id_map light_map; + set mesh_synced; void *world_map; bool world_recalc;