Changeset View
Changeset View
Standalone View
Standalone View
intern/cycles/kernel/kernel_shadow.h
| Show First 20 Lines • Show All 107 Lines • ▼ Show 20 Lines | #ifdef __VOLUME__ | ||||
| Ray segment_ray = *ray; | Ray segment_ray = *ray; | ||||
| segment_ray.t = isect->t; | segment_ray.t = isect->t; | ||||
| kernel_volume_shadow(kg, &ps, &segment_ray, &throughput); | kernel_volume_shadow(kg, &ps, &segment_ray, &throughput); | ||||
| } | } | ||||
| #endif | #endif | ||||
| /* setup shader data at surface */ | /* setup shader data at surface */ | ||||
| ShaderData sd; | ShaderData sd; | ||||
| ShaderClosure sd_closure[MAX_SHADOW_CLOSURE]; | |||||
| sd.closure = sd_closure; | |||||
| sd.max_closure = MAX_SHADOW_CLOSURE; | |||||
| shader_setup_from_ray(kg, &sd, isect, ray); | shader_setup_from_ray(kg, &sd, isect, ray); | ||||
| /* attenuation from transparent surface */ | /* attenuation from transparent surface */ | ||||
| if(!(sd.flag & SD_HAS_ONLY_VOLUME)) { | if(!(sd.flag & SD_HAS_ONLY_VOLUME)) { | ||||
| path_state_modify_bounce(state, true); | path_state_modify_bounce(state, true); | ||||
| shader_eval_surface(kg, &sd, state, 0.0f, PATH_RAY_SHADOW, SHADER_CONTEXT_SHADOW); | shader_eval_surface(kg, &sd, state, 0.0f, PATH_RAY_SHADOW, SHADER_CONTEXT_SHADOW); | ||||
| path_state_modify_bounce(state, false); | path_state_modify_bounce(state, false); | ||||
| ▲ Show 20 Lines • Show All 124 Lines • ▼ Show 20 Lines | #ifdef __VOLUME__ | ||||
| } | } | ||||
| #endif | #endif | ||||
| /* setup shader data at surface */ | /* setup shader data at surface */ | ||||
| #ifdef __SPLIT_KERNEL__ | #ifdef __SPLIT_KERNEL__ | ||||
| ShaderData *sd = kg->sd_input; | ShaderData *sd = kg->sd_input; | ||||
| #else | #else | ||||
| ShaderData sd_object; | ShaderData sd_object; | ||||
| ShaderClosure sd_object_closure[MAX_SHADOW_CLOSURE]; | |||||
| sd_object.closure = sd_object_closure; | |||||
| sd_object.max_closure = MAX_SHADOW_CLOSURE; | |||||
| ShaderData *sd = &sd_object; | ShaderData *sd = &sd_object; | ||||
| #endif | #endif | ||||
| shader_setup_from_ray(kg, sd, isect, ray); | shader_setup_from_ray(kg, sd, isect, ray); | ||||
| /* attenuation from transparent surface */ | /* attenuation from transparent surface */ | ||||
| if(!(ccl_fetch(sd, flag) & SD_HAS_ONLY_VOLUME)) { | if(!(ccl_fetch(sd, flag) & SD_HAS_ONLY_VOLUME)) { | ||||
| path_state_modify_bounce(state, true); | path_state_modify_bounce(state, true); | ||||
| shader_eval_surface(kg, sd, state, 0.0f, PATH_RAY_SHADOW, SHADER_CONTEXT_SHADOW); | shader_eval_surface(kg, sd, state, 0.0f, PATH_RAY_SHADOW, SHADER_CONTEXT_SHADOW); | ||||
| Show All 37 Lines | |||||