[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [52642] trunk/blender/intern/cycles/render : Fix #33335: cycles SVM closure issue in recent bugfix, incorrectly tagging
Brecht Van Lommel
brechtvanlommel at pandora.be
Wed Nov 28 20:13:35 CET 2012
Revision: 52642
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=52642
Author: blendix
Date: 2012-11-28 19:13:34 +0000 (Wed, 28 Nov 2012)
Log Message:
-----------
Fix #33335: cycles SVM closure issue in recent bugfix, incorrectly tagging
node as done.
Modified Paths:
--------------
trunk/blender/intern/cycles/render/svm.cpp
trunk/blender/intern/cycles/render/svm.h
Modified: trunk/blender/intern/cycles/render/svm.cpp
===================================================================
--- trunk/blender/intern/cycles/render/svm.cpp 2012-11-28 16:42:39 UTC (rev 52641)
+++ trunk/blender/intern/cycles/render/svm.cpp 2012-11-28 19:13:34 UTC (rev 52642)
@@ -487,7 +487,7 @@
}
}
-void SVMCompiler::generate_multi_closure(ShaderNode *node, set<ShaderNode*>& done)
+void SVMCompiler::generate_multi_closure(ShaderNode *node, set<ShaderNode*>& done, set<ShaderNode*>& closure_done)
{
/* todo: the weaks point here is that unlike the single closure sampling
* we will evaluate all nodes even if they are used as input for closures
@@ -495,10 +495,10 @@
* nodes at runtime, especially if they are tangled up */
/* only generate once */
- if(done.find(node) != done.end())
+ if(closure_done.find(node) != closure_done.end())
return;
- done.insert(node);
+ closure_done.insert(node);
if(node->name == ustring("mix_closure") || node->name == ustring("add_closure")) {
/* weighting is already taken care of in ShaderGraph::transform_multi_closure */
@@ -506,9 +506,9 @@
ShaderInput *cl2in = node->input("Closure2");
if(cl1in->link)
- generate_multi_closure(cl1in->link->parent, done);
+ generate_multi_closure(cl1in->link->parent, done, closure_done);
if(cl2in->link)
- generate_multi_closure(cl2in->link->parent, done);
+ generate_multi_closure(cl2in->link->parent, done, closure_done);
}
else {
/* execute dependencies for closure */
@@ -543,6 +543,8 @@
if(node->name == ustring("transparent"))
current_shader->has_surface_transparent = true;
}
+
+ done.insert(node);
}
@@ -613,8 +615,10 @@
if(generate) {
set<ShaderNode*> done;
- if(use_multi_closure)
- generate_multi_closure(clin->link->parent, done);
+ if(use_multi_closure) {
+ set<ShaderNode*> closure_done;
+ generate_multi_closure(clin->link->parent, done, closure_done);
+ }
else
generate_closure(clin->link->parent, done);
}
Modified: trunk/blender/intern/cycles/render/svm.h
===================================================================
--- trunk/blender/intern/cycles/render/svm.h 2012-11-28 16:42:39 UTC (rev 52641)
+++ trunk/blender/intern/cycles/render/svm.h 2012-11-28 19:13:34 UTC (rev 52642)
@@ -130,7 +130,7 @@
void generate_closure(ShaderNode *node, set<ShaderNode*>& done);
/* multi closure */
- void generate_multi_closure(ShaderNode *node, set<ShaderNode*>& done);
+ void generate_multi_closure(ShaderNode *node, set<ShaderNode*>& done, set<ShaderNode*>& closure_done);
/* compile */
void compile_type(Shader *shader, ShaderGraph *graph, ShaderType type);
More information about the Bf-blender-cvs
mailing list