196
197
/* our own ray types */
197
198
static const char *raytypes[] = {
198
"camera", /* PATH_RAY_CAMERA */
199
"reflection", /* PATH_RAY_REFLECT */
200
"refraction", /* PATH_RAY_TRANSMIT */
201
"diffuse", /* PATH_RAY_DIFFUSE */
202
"glossy", /* PATH_RAY_GLOSSY */
203
"singular", /* PATH_RAY_SINGULAR */
204
"transparent", /* PATH_RAY_TRANSPARENT */
205
"shadow", /* PATH_RAY_SHADOW_OPAQUE */
206
"shadow", /* PATH_RAY_SHADOW_TRANSPARENT */
199
"camera", /* PATH_RAY_CAMERA */
200
"reflection", /* PATH_RAY_REFLECT */
201
"refraction", /* PATH_RAY_TRANSMIT */
202
"diffuse", /* PATH_RAY_DIFFUSE */
203
"glossy", /* PATH_RAY_GLOSSY */
204
"singular", /* PATH_RAY_SINGULAR */
205
"transparent", /* PATH_RAY_TRANSPARENT */
206
"shadow", /* PATH_RAY_SHADOW_OPAQUE */
207
"shadow", /* PATH_RAY_SHADOW_TRANSPARENT */
210
211
"diffuse_ancestor", /* PATH_RAY_DIFFUSE_ANCESTOR */
211
212
"glossy_ancestor", /* PATH_RAY_GLOSSY_ANCESTOR */
212
213
"bssrdf_ancestor", /* PATH_RAY_BSSRDF_ANCESTOR */
214
"__unused__", /* PATH_RAY_SINGLE_PASS_DONE */
215
"volume_scatter", /* PATH_RAY_VOLUME_SCATTER */
215
218
const int nraytypes = sizeof(raytypes)/sizeof(raytypes[0]);
724
727
} while(!nodes_done);
727
void OSLCompiler::compile_type(Shader *shader, ShaderGraph *graph, ShaderType type)
730
OSL::ShadingAttribStateRef OSLCompiler::compile_type(Shader *shader, ShaderGraph *graph, ShaderType type)
729
732
OSL::ShadingSystem *ss = (OSL::ShadingSystem*)shadingsys;
731
734
current_type = type;
736
#if OSL_LIBRARY_VERSION_CODE >= 10501
737
OSL::ShadingAttribStateRef group = ss->ShaderGroupBegin(shader->name.c_str());
733
739
ss->ShaderGroupBegin(shader->name.c_str());
735
742
ShaderNode *output = graph->output();
736
743
set<ShaderNode*> dependencies;
759
766
ss->ShaderGroupEnd();
768
#if OSL_LIBRARY_VERSION_CODE >= 10501
771
OSL::ShadingAttribStateRef group = ss->state();
762
777
void OSLCompiler::compile(OSLGlobals *og, Shader *shader)
764
779
if(shader->need_update) {
765
OSL::ShadingSystem *ss = (OSL::ShadingSystem*)shadingsys;
766
780
ShaderGraph *graph = shader->graph;
767
781
ShaderNode *output = (graph)? graph->output(): NULL;
789
803
/* generate surface shader */
790
804
if(shader->used && graph && output->input("Surface")->link) {
791
compile_type(shader, shader->graph, SHADER_TYPE_SURFACE);
792
shader->osl_surface_ref = ss->state();
805
shader->osl_surface_ref = compile_type(shader, shader->graph, SHADER_TYPE_SURFACE);
794
if(shader->graph_bump) {
796
compile_type(shader, shader->graph_bump, SHADER_TYPE_SURFACE);
797
shader->osl_surface_bump_ref = ss->state();
807
if(shader->graph_bump)
808
shader->osl_surface_bump_ref = compile_type(shader, shader->graph_bump, SHADER_TYPE_SURFACE);
800
810
shader->osl_surface_bump_ref = shader->osl_surface_ref;
804
812
shader->has_surface = true;
811
819
/* generate volume shader */
812
820
if(shader->used && graph && output->input("Volume")->link) {
813
compile_type(shader, shader->graph, SHADER_TYPE_VOLUME);
821
shader->osl_volume_ref = compile_type(shader, shader->graph, SHADER_TYPE_VOLUME);
814
822
shader->has_volume = true;
816
shader->osl_volume_ref = ss->state();
820
825
shader->osl_volume_ref = OSL::ShadingAttribStateRef();
822
827
/* generate displacement shader */
823
828
if(shader->used && graph && output->input("Displacement")->link) {
824
compile_type(shader, shader->graph, SHADER_TYPE_DISPLACEMENT);
829
shader->osl_displacement_ref = compile_type(shader, shader->graph, SHADER_TYPE_DISPLACEMENT);
825
830
shader->has_displacement = true;
826
shader->osl_displacement_ref = ss->state();
830
833
shader->osl_displacement_ref = OSL::ShadingAttribStateRef();