Revision: 37044 http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37044 Author: blendix Date: 2011-05-31 10:41:01 +0000 (Tue, 31 May 2011) Log Message: ----------- Cycles: fix sync issue with group instances.
Modified Paths: -------------- branches/cycles/intern/cycles/blender/blender_object.cpp branches/cycles/intern/cycles/blender/blender_sync.h branches/cycles/intern/cycles/blender/blender_util.h Modified: branches/cycles/intern/cycles/blender/blender_object.cpp =================================================================== --- branches/cycles/intern/cycles/blender/blender_object.cpp 2011-05-31 09:56:38 UTC (rev 37043) +++ branches/cycles/intern/cycles/blender/blender_object.cpp 2011-05-31 10:41:01 UTC (rev 37044) @@ -65,13 +65,13 @@ /* Light */ -void BlenderSync::sync_light(BL::Object b_ob, Transform& tfm) +void BlenderSync::sync_light(BL::Object b_parent, int b_index, BL::Object b_ob, Transform& tfm) { /* test if we need to sync */ Light *light; + ObjectKey key(b_parent, b_index, b_ob); - /* todo: account for instancing */ - if(!light_map.sync(&light, b_ob)) + if(!light_map.sync(&light, b_ob, b_parent, key)) return; /* location */ @@ -98,7 +98,7 @@ { /* light is handled separately */ if(object_is_light(b_ob)) { - sync_light(b_ob, tfm); + sync_light(b_parent, b_index, b_ob, tfm); return; } @@ -112,7 +112,7 @@ bool object_updated = false; /* object sync */ - if(object_map.sync(&object, b_ob, key)) { + if(object_map.sync(&object, b_ob, b_parent, key)) { object->name = b_ob.name(); object->tfm = tfm; object->tag_update(scene); Modified: branches/cycles/intern/cycles/blender/blender_sync.h =================================================================== --- branches/cycles/intern/cycles/blender/blender_sync.h 2011-05-31 09:56:38 UTC (rev 37043) +++ branches/cycles/intern/cycles/blender/blender_sync.h 2011-05-31 10:41:01 UTC (rev 37044) @@ -76,7 +76,7 @@ void sync_nodes(Shader *shader, BL::ShaderNodeTree b_ntree); Mesh *sync_mesh(BL::Object b_ob, bool object_updated); void sync_object(BL::Object b_parent, int b_index, BL::Object b_object, Transform& tfm); - void sync_light(BL::Object b_ob, Transform& tfm); + void sync_light(BL::Object b_parent, int b_index, BL::Object b_ob, Transform& tfm); /* util */ void find_shader(BL::ID id, vector<uint>& used_shaders); @@ -91,7 +91,7 @@ id_map<void*, Shader> shader_map; id_map<ObjectKey, Object> object_map; id_map<void*, Mesh> mesh_map; - id_map<void*, Light> light_map; + id_map<ObjectKey, Light> light_map; void *world_map; bool world_recalc; Modified: branches/cycles/intern/cycles/blender/blender_util.h =================================================================== --- branches/cycles/intern/cycles/blender/blender_util.h 2011-05-31 09:56:38 UTC (rev 37043) +++ branches/cycles/intern/cycles/blender/blender_util.h 2011-05-31 10:41:01 UTC (rev 37044) @@ -225,10 +225,10 @@ bool sync(T **r_data, BL::ID id) { - return sync(r_data, id, id.ptr.id.data); + return sync(r_data, id, id, id.ptr.id.data); } - bool sync(T **r_data, BL::ID id, const K& key) + bool sync(T **r_data, BL::ID id, BL::ID parent, const K& key) { T *data = find(key); bool recalc; @@ -240,8 +240,11 @@ b_map[key] = data; recalc = true; } - else + else { recalc = (b_recalc.find(id.ptr.data) != b_recalc.end()); + if(parent.ptr.data) + recalc = recalc || (b_recalc.find(parent.ptr.data) != b_recalc.end()); + } used(data); _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs