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@gmail.com>2014-03-29 16:03:48 +0400
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2014-03-29 16:03:48 +0400
commit663a750c7fe3fdba0830e3054e98f8d3959f9ea3 (patch)
treeb4cd2e141b274edf58743aec4304a021f8c7e006 /intern/cycles
parenta2e4ebd36a319dc18f362b1f75863b8ee93eed7d (diff)
Fix: cycles volume emission incorrectly enabling surface importance sampling.
Diffstat (limited to 'intern/cycles')
-rw-r--r--intern/cycles/render/osl.cpp20
-rw-r--r--intern/cycles/render/svm.cpp36
2 files changed, 31 insertions, 25 deletions
diff --git a/intern/cycles/render/osl.cpp b/intern/cycles/render/osl.cpp
index d4ca014a907..b64a9e7aed3 100644
--- a/intern/cycles/render/osl.cpp
+++ b/intern/cycles/render/osl.cpp
@@ -543,7 +543,7 @@ void OSLCompiler::add(ShaderNode *node, const char *name, bool isfilepath)
/* test if we shader contains specific closures */
OSLShaderInfo *info = ((OSLShaderManager*)manager)->shader_loaded_info(name);
- if(info) {
+ if(info && current_type == SHADER_TYPE_SURFACE) {
if(info->has_surface_emission)
current_shader->has_surface_emission = true;
if(info->has_surface_transparent)
@@ -708,14 +708,16 @@ void OSLCompiler::generate_nodes(const set<ShaderNode*>& nodes)
node->compile(*this);
done.insert(node);
- if(node->has_surface_emission())
- current_shader->has_surface_emission = true;
- if(node->has_surface_transparent())
- current_shader->has_surface_transparent = true;
- if(node->has_surface_bssrdf()) {
- current_shader->has_surface_bssrdf = true;
- if(node->has_bssrdf_bump())
- current_shader->has_bssrdf_bump = true;
+ if(current_type == SHADER_TYPE_SURFACE) {
+ if(node->has_surface_emission())
+ current_shader->has_surface_emission = true;
+ if(node->has_surface_transparent())
+ current_shader->has_surface_transparent = true;
+ if(node->has_surface_bssrdf()) {
+ current_shader->has_surface_bssrdf = true;
+ if(node->has_bssrdf_bump())
+ current_shader->has_bssrdf_bump = true;
+ }
}
}
else
diff --git a/intern/cycles/render/svm.cpp b/intern/cycles/render/svm.cpp
index 538b1aae313..377da67b5a4 100644
--- a/intern/cycles/render/svm.cpp
+++ b/intern/cycles/render/svm.cpp
@@ -489,14 +489,16 @@ void SVMCompiler::generate_closure(ShaderNode *node, set<ShaderNode*>& done)
stack_clear_users(node, done);
stack_clear_temporary(node);
- if(node->has_surface_emission())
- current_shader->has_surface_emission = true;
- if(node->has_surface_transparent())
- current_shader->has_surface_transparent = true;
- if(node->has_surface_bssrdf()) {
- current_shader->has_surface_bssrdf = true;
- if(node->has_bssrdf_bump())
- current_shader->has_bssrdf_bump = true;
+ if(current_type == SHADER_TYPE_SURFACE) {
+ if(node->has_surface_emission())
+ current_shader->has_surface_emission = true;
+ if(node->has_surface_transparent())
+ current_shader->has_surface_transparent = true;
+ if(node->has_surface_bssrdf()) {
+ current_shader->has_surface_bssrdf = true;
+ if(node->has_bssrdf_bump())
+ current_shader->has_bssrdf_bump = true;
+ }
}
/* end node is added outside of this */
@@ -554,14 +556,16 @@ void SVMCompiler::generate_multi_closure(ShaderNode *node, set<ShaderNode*>& don
mix_weight_offset = SVM_STACK_INVALID;
- if(node->has_surface_emission())
- current_shader->has_surface_emission = true;
- if(node->has_surface_transparent())
- current_shader->has_surface_transparent = true;
- if(node->has_surface_bssrdf()) {
- current_shader->has_surface_bssrdf = true;
- if(node->has_bssrdf_bump())
- current_shader->has_bssrdf_bump = true;
+ if(current_type == SHADER_TYPE_SURFACE) {
+ if(node->has_surface_emission())
+ current_shader->has_surface_emission = true;
+ if(node->has_surface_transparent())
+ current_shader->has_surface_transparent = true;
+ if(node->has_surface_bssrdf()) {
+ current_shader->has_surface_bssrdf = true;
+ if(node->has_bssrdf_bump())
+ current_shader->has_bssrdf_bump = true;
+ }
}
}