diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2013-12-29 19:30:55 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2013-12-30 03:04:02 +0400 |
commit | af128c4c9655c57b860010746dc7b5707c6520ba (patch) | |
tree | fde6fb193c5750fb2488b781862ef6daa2bb20e1 /intern | |
parent | 30aa0c2482367fd5a99f2b791206b9e72d9ca7e3 (diff) |
Fix cycles volume emission not working with OSL.
Diffstat (limited to 'intern')
-rw-r--r-- | intern/cycles/kernel/osl/osl_shader.cpp | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/intern/cycles/kernel/osl/osl_shader.cpp b/intern/cycles/kernel/osl/osl_shader.cpp index 6e1d8b2d404..6062996af36 100644 --- a/intern/cycles/kernel/osl/osl_shader.cpp +++ b/intern/cycles/kernel/osl/osl_shader.cpp @@ -415,11 +415,27 @@ static void flatten_volume_closure_tree(ShaderData *sd, } break; } + case CClosurePrimitive::Emissive: { + /* sample weight */ + float sample_weight = fabsf(average(weight)); + + sc.sample_weight = sample_weight; + sc.type = CLOSURE_EMISSION_ID; + sc.data0 = 0.0f; + sc.data1 = 0.0f; + sc.prim = NULL; + + /* flag */ + if(sd->num_closure < MAX_CLOSURE) { + sd->closure[sd->num_closure++] = sc; + sd->flag |= SD_EMISSION; + } + break; + } case CClosurePrimitive::Holdout: break; /* not implemented */ case CClosurePrimitive::Background: case CClosurePrimitive::BSDF: - case CClosurePrimitive::Emissive: case CClosurePrimitive::BSSRDF: case CClosurePrimitive::AmbientOcclusion: break; /* not relevant */ |