Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2011-10-13 03:03:12 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2011-10-13 03:03:12 +0400
commit9ebfcea8f392a0ac91247973d2e9ee06f689799c (patch)
tree48ee1910bbe7156e262fd2329dc8346c1e314bfa /intern/cycles/render/svm.cpp
parent310b25c388aeaf43eeb4b0e4895cc5a24e44cd8e (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.cpp31
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();