diff options
author | Thomas Dinges <blender@dingto.org> | 2015-04-28 12:11:39 +0300 |
---|---|---|
committer | Thomas Dinges <blender@dingto.org> | 2015-04-28 12:20:27 +0300 |
commit | 5e423775da5c85a0340d7acd302f6d3cbaa6b159 (patch) | |
tree | 4e70c5995f80fafd12f33d7c770f2706ce86bd82 /intern/cycles/kernel/kernel_volume.h | |
parent | d920b8e075ed949bd21297bb3baa4a8cb22428c9 (diff) |
Cleanup: Move Cycles volume stack update for subsurface into kernel_volume.h.
Diffstat (limited to 'intern/cycles/kernel/kernel_volume.h')
-rw-r--r-- | intern/cycles/kernel/kernel_volume.h | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/intern/cycles/kernel/kernel_volume.h b/intern/cycles/kernel/kernel_volume.h index 5e34b7ee85e..3d3d871a702 100644 --- a/intern/cycles/kernel/kernel_volume.h +++ b/intern/cycles/kernel/kernel_volume.h @@ -1097,4 +1097,29 @@ ccl_device void kernel_volume_stack_enter_exit(KernelGlobals *kg, ShaderData *sd } } +#ifdef __SUBSURFACE__ +ccl_device void kernel_volume_stack_update_for_subsurface(KernelGlobals *kg, + Ray *ray, + VolumeStack *stack) +{ + kernel_assert(kernel_data.integrator.use_volumes); + + Ray volume_ray = *ray; + Intersection isect; + int step = 0; + while(step < VOLUME_STACK_SIZE && + scene_intersect_volume(kg, &volume_ray, &isect)) + { + ShaderData sd; + shader_setup_from_ray(kg, &sd, &isect, &volume_ray, 0, 0); + kernel_volume_stack_enter_exit(kg, &sd, stack); + + /* Move ray forward. */ + volume_ray.P = ray_offset(sd.P, -sd.Ng); + volume_ray.t -= sd.ray_length; + ++step; + } +} +#endif + CCL_NAMESPACE_END |