diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2011-05-31 14:57:43 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2011-05-31 14:57:43 +0400 |
commit | 20746f6bb05dbcfbc3d425cbf3cd6bf163dbc76e (patch) | |
tree | 5af4bf635e386a591c87cbe8c6fa579690ea918f /intern/cycles | |
parent | d404c31e8d002a00229bdd91769ca30c6a0e3e4d (diff) |
Cycles: fix instanced mesh sync being a bit too slow.
Diffstat (limited to 'intern/cycles')
-rw-r--r-- | intern/cycles/blender/blender_mesh.cpp | 6 | ||||
-rw-r--r-- | intern/cycles/blender/blender_object.cpp | 2 | ||||
-rw-r--r-- | intern/cycles/blender/blender_sync.h | 1 |
3 files changed, 9 insertions, 0 deletions
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<ObjectKey, Object> object_map; id_map<void*, Mesh> mesh_map; id_map<ObjectKey, Light> light_map; + set<Mesh*> mesh_synced; void *world_map; bool world_recalc; |