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>2011-05-31 14:57:43 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2011-05-31 14:57:43 +0400
commit20746f6bb05dbcfbc3d425cbf3cd6bf163dbc76e (patch)
tree5af4bf635e386a591c87cbe8c6fa579690ea918f /intern/cycles
parentd404c31e8d002a00229bdd91769ca30c6a0e3e4d (diff)
Cycles: fix instanced mesh sync being a bit too slow.
Diffstat (limited to 'intern/cycles')
-rw-r--r--intern/cycles/blender/blender_mesh.cpp6
-rw-r--r--intern/cycles/blender/blender_object.cpp2
-rw-r--r--intern/cycles/blender/blender_sync.h1
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;