diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2011-10-13 03:03:12 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2011-10-13 03:03:12 +0400 |
commit | 9ebfcea8f392a0ac91247973d2e9ee06f689799c (patch) | |
tree | 48ee1910bbe7156e262fd2329dc8346c1e314bfa /intern/cycles/render/svm.cpp | |
parent | 310b25c388aeaf43eeb4b0e4895cc5a24e44cd8e (diff) |
Cycles: revert commit that joined surface/volume socket into a single shader socket,
on second thought this makes it a bit too difficult to understand what's going on.
Diffstat (limited to 'intern/cycles/render/svm.cpp')
-rw-r--r-- | intern/cycles/render/svm.cpp | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/intern/cycles/render/svm.cpp b/intern/cycles/render/svm.cpp index 054989bbc28..a1687ae5e29 100644 --- a/intern/cycles/render/svm.cpp +++ b/intern/cycles/render/svm.cpp @@ -107,7 +107,7 @@ SVMCompiler::SVMCompiler(ShaderManager *shader_manager_, ImageManager *image_man image_manager = image_manager_; sunsky = NULL; max_stack_use = 0; - current_type = SHADER_TYPE_CLOSURE; + current_type = SHADER_TYPE_SURFACE; current_shader = NULL; background = false; mix_weight_offset = SVM_STACK_INVALID; @@ -467,8 +467,6 @@ void SVMCompiler::generate_closure(ShaderNode *node, set<ShaderNode*>& done) current_shader->has_surface_emission = true; if(node->name == ustring("transparent")) current_shader->has_surface_transparent = true; - if(node->name == ustring("volume")) - current_shader->has_volume = true; /* end node is added outside of this */ } @@ -579,8 +577,10 @@ void SVMCompiler::compile_type(Shader *shader, ShaderGraph *graph, ShaderType ty ShaderNode *node = graph->output(); ShaderInput *clin = NULL; - if(type == SHADER_TYPE_CLOSURE) - clin = node->input("Closure"); + if(type == SHADER_TYPE_SURFACE) + clin = node->input("Surface"); + else if(type == SHADER_TYPE_VOLUME) + clin = node->input("Volume"); else if(type == SHADER_TYPE_DISPLACEMENT) clin = node->input("Displacement"); else @@ -599,9 +599,15 @@ void SVMCompiler::compile_type(Shader *shader, ShaderGraph *graph, ShaderType ty if(clin->link) { bool generate = false; - if(type == SHADER_TYPE_CLOSURE) { + if(type == SHADER_TYPE_SURFACE) { /* generate surface shader */ generate = true; + shader->has_surface = true; + } + else if(type == SHADER_TYPE_VOLUME) { + /* generate volume shader */ + generate = true; + shader->has_volume = true; } else if(type == SHADER_TYPE_DISPLACEMENT) { /* generate displacement shader */ @@ -630,7 +636,7 @@ void SVMCompiler::compile(Shader *shader, vector<int4>& global_svm_nodes, int in /* copy graph for shader with bump mapping */ ShaderNode *node = shader->graph->output(); - if(node->input("Closure")->link && node->input("Displacement")->link) + if(node->input("Surface")->link && node->input("Displacement")->link) if(!shader->graph_bump) shader->graph_bump = shader->graph->copy(); @@ -641,23 +647,30 @@ void SVMCompiler::compile(Shader *shader, vector<int4>& global_svm_nodes, int in current_shader = shader; + shader->has_surface = false; shader->has_surface_emission = false; shader->has_surface_transparent = false; shader->has_volume = false; shader->has_displacement = false; /* generate surface shader */ - compile_type(shader, shader->graph, SHADER_TYPE_CLOSURE); + compile_type(shader, shader->graph, SHADER_TYPE_SURFACE); global_svm_nodes[index*2 + 0].y = global_svm_nodes.size(); global_svm_nodes[index*2 + 1].y = global_svm_nodes.size(); global_svm_nodes.insert(global_svm_nodes.end(), svm_nodes.begin(), svm_nodes.end()); if(shader->graph_bump) { - compile_type(shader, shader->graph_bump, SHADER_TYPE_CLOSURE); + compile_type(shader, shader->graph_bump, SHADER_TYPE_SURFACE); global_svm_nodes[index*2 + 1].y = global_svm_nodes.size(); global_svm_nodes.insert(global_svm_nodes.end(), svm_nodes.begin(), svm_nodes.end()); } + /* generate volume shader */ + compile_type(shader, shader->graph, SHADER_TYPE_VOLUME); + global_svm_nodes[index*2 + 0].z = global_svm_nodes.size(); + global_svm_nodes[index*2 + 1].z = global_svm_nodes.size(); + global_svm_nodes.insert(global_svm_nodes.end(), svm_nodes.begin(), svm_nodes.end()); + /* generate displacement shader */ compile_type(shader, shader->graph, SHADER_TYPE_DISPLACEMENT); global_svm_nodes[index*2 + 0].w = global_svm_nodes.size(); |