diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-07-23 18:48:19 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-07-23 18:48:19 +0400 |
commit | 5412389af61f55d4e6a8ff271df01411b195e659 (patch) | |
tree | 79a5563151bf5aa5d7f32154fe5889e861f92ad7 /intern | |
parent | a5d08781fc9d113830d700181957b7ba3b37eb81 (diff) |
fix for cycles bug in localview: see r48269, bits used for localview gave collisions with PathRayFlag's
Diffstat (limited to 'intern')
-rw-r--r-- | intern/cycles/blender/blender_object.cpp | 1 | ||||
-rw-r--r-- | intern/cycles/blender/blender_sync.cpp | 3 | ||||
-rw-r--r-- | intern/cycles/blender/blender_sync.h | 15 | ||||
-rw-r--r-- | intern/cycles/kernel/kernel_types.h | 2 |
4 files changed, 21 insertions, 0 deletions
diff --git a/intern/cycles/blender/blender_object.cpp b/intern/cycles/blender/blender_object.cpp index a928bd9a6ea..242f7c8ecef 100644 --- a/intern/cycles/blender/blender_object.cpp +++ b/intern/cycles/blender/blender_object.cpp @@ -306,6 +306,7 @@ void BlenderSync::sync_objects(BL::SpaceView3D b_v3d, int motion) for(b_sce.objects.begin(b_ob); b_ob != b_sce.objects.end(); ++b_ob) { bool hide = (render_layer.use_viewport_visibility)? b_ob->hide(): b_ob->hide_render(); uint ob_layer = get_layer(b_ob->layers(), b_ob->layers_local_view(), object_is_light(*b_ob)); + CYCLES_LOCAL_LAYER_HACK(render_layer.use_localview, ob_layer); hide = hide || !(ob_layer & scene_layer); if(!hide) { diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp index c9d2d68da0a..ae28453a696 100644 --- a/intern/cycles/blender/blender_sync.cpp +++ b/intern/cycles/blender/blender_sync.cpp @@ -219,7 +219,9 @@ void BlenderSync::sync_render_layers(BL::SpaceView3D b_v3d, const char *layer) layer = layername.c_str(); } else { + render_layer.use_localview = (b_v3d.local_view() ? true : false); render_layer.scene_layer = get_layer(b_v3d.layers(), b_v3d.layers_local_view()); + CYCLES_LOCAL_LAYER_HACK(render_layer.use_localview, render_layer.scene_layer); render_layer.layer = render_layer.scene_layer; render_layer.holdout_layer = 0; render_layer.material_override = PointerRNA_NULL; @@ -245,6 +247,7 @@ void BlenderSync::sync_render_layers(BL::SpaceView3D b_v3d, const char *layer) render_layer.material_override = b_rlay->material_override(); render_layer.use_background = b_rlay->use_sky(); render_layer.use_viewport_visibility = false; + render_layer.use_localview = false; render_layer.samples = b_rlay->samples(); } diff --git a/intern/cycles/blender/blender_sync.h b/intern/cycles/blender/blender_sync.h index 8c31c4b86ba..1a6c04db10c 100644 --- a/intern/cycles/blender/blender_sync.h +++ b/intern/cycles/blender/blender_sync.h @@ -127,10 +127,25 @@ private: BL::Material material_override; bool use_background; bool use_viewport_visibility; + bool use_localview; int samples; } render_layer; }; +/* we don't have spare bits for localview (normally 20-28) + * because PATH_RAY_LAYER_SHIFT uses 20-32. + * So - check if we have localview and if so, shift local + * view bits down to 1-8, since this is done for the view + * port only - it should be OK and not conflict with + * render layers. - Campbell. + * + * ... as an alternative we could use uint64_t + */ +#define CYCLES_LOCAL_LAYER_HACK(use_localview, layer) \ + if (use_localview) { \ + layer >>= 20; \ + } (void)0 + CCL_NAMESPACE_END #endif /* __BLENDER_SYNC_H__ */ diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h index d204b114b8e..30d45ad1118 100644 --- a/intern/cycles/kernel/kernel_types.h +++ b/intern/cycles/kernel/kernel_types.h @@ -172,6 +172,8 @@ enum PathRayFlag { PATH_RAY_ALL = (1|2|4|8|16|32|64|128|256|512), + /* this gives collisions with localview bits + * see: CYCLES_LOCAL_LAYER_HACK(), grr - Campbell */ PATH_RAY_LAYER_SHIFT = (32-20) }; |