diff options
Diffstat (limited to 'intern/cycles/kernel/kernel_shader.h')
-rw-r--r-- | intern/cycles/kernel/kernel_shader.h | 34 |
1 files changed, 10 insertions, 24 deletions
diff --git a/intern/cycles/kernel/kernel_shader.h b/intern/cycles/kernel/kernel_shader.h index b410785d7e0..30195605f2e 100644 --- a/intern/cycles/kernel/kernel_shader.h +++ b/intern/cycles/kernel/kernel_shader.h @@ -926,24 +926,14 @@ ccl_device float3 shader_bssrdf_sum(ShaderData *sd, float3 *N_, float *texture_b /* Emission */ -ccl_device float3 emissive_eval(KernelGlobals *kg, ShaderData *sd, ShaderClosure *sc) -{ - return emissive_simple_eval(sd->Ng, sd->I); -} - ccl_device float3 shader_emissive_eval(KernelGlobals *kg, ShaderData *sd) { - float3 eval; - eval = make_float3(0.0f, 0.0f, 0.0f); - - for(int i = 0; i < sd->num_closure; i++) { - ShaderClosure *sc = &sd->closure[i]; - - if(CLOSURE_IS_EMISSION(sc->type)) - eval += emissive_eval(kg, sd, sc)*sc->weight; + if(sd->flag & SD_EMISSION) { + return emissive_simple_eval(sd->Ng, sd->I) * sd->closure_emission_background; + } + else { + return make_float3(0.0f, 0.0f, 0.0f); } - - return eval; } /* Holdout */ @@ -1011,16 +1001,12 @@ ccl_device float3 shader_eval_background(KernelGlobals *kg, ShaderData *sd, svm_eval_nodes(kg, sd, state, SHADER_TYPE_SURFACE, path_flag); } - float3 eval = make_float3(0.0f, 0.0f, 0.0f); - - for(int i = 0; i < sd->num_closure; i++) { - const ShaderClosure *sc = &sd->closure[i]; - - if(CLOSURE_IS_BACKGROUND(sc->type)) - eval += sc->weight; + if(sd->flag & SD_EMISSION) { + return sd->closure_emission_background; + } + else { + return make_float3(0.0f, 0.0f, 0.0f); } - - return eval; #else /* __SVM__ */ return make_float3(0.8f, 0.8f, 0.8f); #endif /* __SVM__ */ |