diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2016-04-14 18:20:17 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2016-04-14 18:20:17 +0300 |
commit | b8892cac1961341a3c6ab708dcf47b926d310334 (patch) | |
tree | 96dfc45b2ce156014ea53f38a89bb973e8ef1f34 /intern/cycles/kernel/kernel_volume.h | |
parent | 78c3a5d00f77c109f07d100feb5bf3307a46f839 (diff) |
Cycles: Yet another fix for camera in volume
Was an embarrassing glitch in original optimization policy,
the for-loops can't be de-duplicated here.
Diffstat (limited to 'intern/cycles/kernel/kernel_volume.h')
-rw-r--r-- | intern/cycles/kernel/kernel_volume.h | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/intern/cycles/kernel/kernel_volume.h b/intern/cycles/kernel/kernel_volume.h index 86a3adbf93a..ed4f6b2d99b 100644 --- a/intern/cycles/kernel/kernel_volume.h +++ b/intern/cycles/kernel/kernel_volume.h @@ -1013,14 +1013,15 @@ ccl_device void kernel_volume_stack_init(KernelGlobals *kg, shader_setup_from_ray(kg, &sd, isect, &volume_ray); if(sd.flag & SD_BACKFACING) { bool need_add = true; - for(int i = 0; i < stack_index; ++i) { + for(int i = 0; i < enclosed_index && need_add; ++i) { /* If ray exited the volume and never entered to that volume * it means that camera is inside such a volume. */ - if(i < enclosed_index && enclosed_volumes[i] == sd.object) { + if(enclosed_volumes[i] == sd.object) { need_add = false; - break; } + } + for(int i = 0; i < stack_index && need_add; ++i) { /* Don't add intersections twice. */ if(stack[i].object == sd.object) { need_add = false; |